समस्या विवरण
आपको लंबाई n की एक स्ट्रिंग str दी गई है। स्ट्रिंग के प्रत्येक तत्व की स्थिति प्रिंट करें ताकि यह एक पैलिंड्रोम बना सके, अन्यथा स्क्रीन पर "कोई पैलिंड्रोम नहीं" संदेश प्रिंट करें।
पैलिंड्रोम क्या है?
पैलिंड्रोम एक शब्द या वर्णों का क्रम होता है जो पीछे से पढ़ने पर भी वही रहता है, जैसे MADAM, racecar।
उदाहरण
इनपुट: string str = "baa" आउटपुट: 2 1 3 इनपुट: string str = "tinni" आउटपुट: 2 3 1 4 5
एल्गोरिदम
void printPalindromePos(string &str) शुरुआत चरण 1: vectorpos[MAX] घोषित करें चरण 2: n को str की लंबाई के रूप में घोषित और असाइन करें चरण 3: i = 0 से n-1 तक लूप pos[str[i]].push_back(i+1) अंत लूप चरण 4: oddCount = 0 सेट करें चरण 5: oddChar घोषित करें चरण 6: i = 0 से MAX-1 तक लूप यदि pos[i].size() % 2 != 0 तो oddCount को 1 से बढ़ाएं oddChar को i के रूप में सेट करें अंत यदि अंत लूप चरण 7: यदि oddCount > 1 तो "NO PALINDROME" प्रिंट करें चरण 8: i = 0 से MAX-1 तक लूप mid = pos[i].size()/2 घोषित करें j = 0 से mid-1 तक लूप pos[i][j] प्रिंट करें अंत लूप अंत लूप चरण 9: यदि oddCount > 0 तो last = pos[oddChar].size() - 1 घोषित और सेट करें pos[oddChar][last] प्रिंट करें pos[oddChar].pop_back() अंत यदि चरण 10: i = MAX-1 से 0 तक लूप count = pos[i].size() घोषित और सेट करें j = count/2 से count-1 तक लूप pos[i][j] प्रिंट करें रोकें
C++ प्रोग्राम उदाहरण
#include <bits/stdc++.h>
using namespace std;
const int MAX = 256;
void printPalindromePos(string &str){
vector pos[MAX];
int n = str.length();
for (int i = 0; i < n; i++)
pos[str[i]].push_back(i+1);
int oddCount = 0;
char oddChar;
for (int i = 0; i < MAX; i++) {
if (pos[i].size() % 2 != 0) {
oddCount++;
oddChar = i;
}
}
if (oddCount > 1)
cout << "NO PALINDROME";
for (int i = 0; i < MAX; i++){
int mid = pos[i].size()/2;
for (int j = 0; j < mid; j++)
cout << pos[i][j] << " ";
}
if (oddCount > 0){
int last = pos[oddChar].size() - 1;
cout << pos[oddChar][last] << " ";
pos[oddChar].pop_back();
}
for (int i = MAX-1; i >= 0; i--){
int count = pos[i].size();
for (int j = count/2; j < count; j++)
cout << pos[i][j] << " ";
}
}
int main(){
string s = "tinni";
printPalindromePos(s);
return 0;
}
आउटपुट
उपरोक्त प्रोग्राम चलाने पर निम्नलिखित आउटपुट उत्पन्न होगा:
2 3 1 4 5