इस समस्या में, हमें एक वाक्य दिया गया है। हमारा कार्य वाक्य से उन सभी स्ट्रिंग्स को प्रिंट करना है जो फनी वर्ड्स हैं।
फनी वर्ड
फनी वर्ड वह शब्द है जो इस शर्त का पालन करता है - स्ट्रिंग के आसन्न कैरेक्टर्स और इसके रिवर्स स्ट्रिंग के बीच का निरपेक्ष अंतर समान होता है।
|string[0] - string[1]| = |revstring[0] - revstring[1]|
उदाहरण
Input: string = 'ABRS' Output: Yes Explanation: Reverse string = SRBA |A-B| = 1 = |S-R| |B-R| = 16 = |R-B| |B-A| = 1 = |R-S|
इस समस्या को हल करने के लिए, हमें दिए गए वाक्य से प्रत्येक स्ट्रिंग निकालनी होगी। और प्रिंट करना होगा यदि स्ट्रिंग फनी स्ट्रिंग है।
फनी स्ट्रिंग की जांच - इसके लिए, हम स्ट्रिंग को दोनों छोर से पार करेंगे यानी शुरुआत से और अंत से। और स्ट्रिंग के आसन्न कैरेक्टर्स के बीच निरपेक्ष अंतर की तुलना करेंगे और यदि अंतर समान नहीं है तो false लौटाएंगे।
उदाहरण
नीचे दिया गया कोड हमारे तर्क को लागू करेगा:
#include <iostream>
#include<string.h>
using namespace std;
bool isFunny(string word) {
int i = 1;
int j = word.length() - 2;
for (int i = 0; i < word.length(); i++)
word[i] = tolower(word[i]);
while (i <= j) {
if (abs(word[i] - word[i - 1]) != abs(word[j] - word[j + 1]))
return false;
i++;
j--;
}
return true;
}
void printFunnyWords(string str) {
str += " ";
string word = "";
for (int i = 0; i < str.length(); i++) {
char ch = str[i];
if (ch != ' ')
word += ch;
else {
if (isFunny(word))
cout << word << "\t";
word = "";
}
}
}
int main() {
string sentence = "hello, i love malayalam langauge";
cout << "All funny words of the string '" << sentence << "' are :\n";
printFunnyWords(sentence);
return 0;
}
आउटपुट
All funny words of the string 'hello, i love malayalam langauge' are : i malayalam