समस्या विवरण
हमें एक अंग्रेजी वाक्य वाली स्ट्रिंग दी गई है। लक्ष्य उन शब्दों की संख्या ज्ञात करना है जो पालिंड्रोम हैं। पालिंड्रोम शब्द वे हैं जो आगे और पीछे से समान पढ़े जाते हैं (केस-असंवेदनशील)।
उदाहरण
इनपुट: "My Mom and Anna left at Noon"
आउटपुट: 3
व्याख्या: Mom, Anna, Noon
इनपुट: "I am at level 121 in Racecar game"
आउटपुट: 4
व्याख्या: I, level, 121, Racecar
दृष्टिकोण
वाक्य को स्पेस से शब्दों में विभाजित करें। प्रत्येक शब्द को लोअरकेस में बदलें। दो-पॉइंटर दृष्टिकोण से जाँचें कि शब्द पालिंड्रोम है या नहीं।
एल्गोरिदम
- फंक्शन
check(string):- स्ट्रिंग को लोअरकेस में बदलें
- दोनों सिरों से तुलना करें
- मेल न होने पर false, अन्यथा true लौटाएँ
- फंक्शन
palindrome(string, length):- प्रारंभिक
count = 0, extra = "" - प्रत्येक वर्ण के लिए:
- यदि स्पेस नहीं तो
extraमें जोड़ें - यदि स्पेस है तो
check(extra)जाँचें, सच तोcount++,extraरीसेट करें
- यदि स्पेस नहीं तो
countलौटाएँ
- प्रारंभिक
C++ कार्यान्वयन
#include <bits/stdc++.h>
using namespace std;
bool check(string word) {
transform(word.begin(), word.end(), word.begin(), ::tolower);
int len = word.length();
for (int i = 0; i < len/2; i++) {
if (word[i] != word[len-1-i]) return false;
}
return true;
}
int palindrome(string str, int length) {
int count = 0;
string extra = "";
str += " "; // अंतिम शब्द के लिए
for (int i = 0; i < length; i++) {
char c = str[i];
if (c != ' ') extra += c;
else {
if (check(extra)) count++;
extra = "";
}
}
return count;
}
int main() {
string str = "nitin wants nitin for his company named nitin after nitin";
cout << "Count: " << palindrome(str, str.length()) << endl;
return 0;
}
आउटपुट
Count: 4