Trong bài toán này, chúng ta được đưa ra một câu. Nhiệm vụ của chúng tôi là in tất cả các chuỗi từ câu là từ hài hước.
Từ hài hước là một từ tuân theo điều kiện - Chênh lệch tuyệt đối giữa các ký tự liền kề của chuỗi và chuỗi ngược lại của nó là bằng nhau.
|string[0] - string[1]| = |revstring[0]-revstring[1]|
Hãy lấy một ví dụ để hiểu vấn đề -
Input: string = ‘ABRS’ Output: Yes Explanation: Reverse string = SRBA |A-B| = 1 = |S-R| |B-R| = 16 = |R-B| |B-A| = 1 = |R-S|
Để giải quyết vấn đề này, chúng ta phải trích xuất từng chuỗi từ câu đã cho. Và in nếu chuỗi là một chuỗi hài hước.
Kiểm tra chuỗi hài hước - Đối với điều này, chúng tôi sẽ duyệt qua chuỗi từ cả hai đầu, tức là từ đầu và từ cuối. Và so sánh sự khác biệt tuyệt đối giữa các ký tự liền kề của chuỗi và trả về false nếu sự khác biệt không giống nhau.
Đoạn mã dưới đây sẽ triển khai logic của chúng tôi -
Ví dụ
#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; }
Đầu ra
All funny words of the string 'hello, i love malayalam langauge' are : i malayalam