आपको कुछ लंबाई n के साथ एक स्ट्रिंग str प्रदान की जाती है। स्ट्रिंग के प्रत्येक तत्व की स्थिति को प्रिंट करें ताकि यह एक पैलिंड्रोम बना सके, अन्यथा स्क्रीन पर "नो पैलिंड्रोम" संदेश प्रिंट करें।
पैलिंड्रोम क्या है?
पैलिंड्रोम एक शब्द है, वर्णों का अनुक्रम जो पीछे या पीछे से आगे के तरीके से पढ़ता है, जैसे मैडम, रेसकार।
एक अनुक्रम या एक शब्द पालिंड्रोम खोजने के लिए हम आम तौर पर एक शब्द के रिवर्स को एक अलग स्ट्रिंग में संग्रहीत करते हैं और दोनों की तुलना करते हैं यदि वे समान हैं तो दिया गया शब्द या अनुक्रम पैलिंड्रोम है। लेकिन इस प्रश्न में हमें पैलिंड्रोम में शब्द या अनुक्रम बनाने की व्यवस्था को प्रिंट करना होता है।
जैसे, एक स्ट्रिंग str ="tinni" है तो यह intni या nitin हो सकता है, इसलिए हमें व्यवस्था के किसी एक क्रम को 1 से शुरू होने वाले इंडेक्स के रूप में वापस करना होगा और परिणाम 2 3 1 4 5 या 3 2 1 5 हो सकता है। दोनों में से 4.
उपरोक्त समस्या को नीचे दिए गए उदाहरण की तरह समाधान की आवश्यकता है -
उदाहरण
Input: string str = “baa” Output: 2 1 3 Input: string str = “tinni” Output: 2 3 1 4 5
एल्गोरिदम
void printPalindromePos(string &str) START STEP 1: DECLARE vector<int> pos[MAX] STEP 2: DECLARE AND ASSIGN n WITH LENGTH OF str STEP 3: LOOP FOR i = 0 AND i < n AND i++ pos[str[i]].push_back(i+1) END LOOP STEP 4: SET oddCount = 0 STEP 5: DECLARE oddChar STEP 6: LOOP FOR i=0 AND i<MAX AND i++ IF pos[i].size() % 2 != 0 THEN, INCREMENT oddCount BY 1 SET oddChar AS i END IF END FOR STEP 7: IF oddCount > 1 THEN, PRINT "NO PALINDROME" STEP 8: LOOP FOR i=0 AND i<MAX AND i++ DECRLARE mid = pos[i].size()/2 LOOP FOR j=0 AND j<mid AND j++ PRINT pos[i][j] END LOOP END LOOP STEP 9: IF oddCount > 0 THEN, DECLARE AND SET last = pos[oddChar].size() - 1 PRINT pos[oddChar][last] SET pos[oddChar].pop_back(); END IF STEP 10: LOOP FOR i=MAX-1 AND i>=0 AND i-- DECLARE AND SET count = pos[i].size() LOOP FOR j=count/2 AND j<count AND j++ PRINT pos[i][j] STOP
उदाहरण
#include <bits/stdc++.h> using namespace std; // Giving the maximum characters const int MAX = 256; void printPalindromePos(string &str){ //Inserting all positions of characters in the given string. vector<int> pos[MAX]; int n = str.length(); for (int i = 0; i < n; i++) pos[str[i]].push_back(i+1); /* find the number of odd elements.Takes O(n) */ int oddCount = 0; char oddChar; for (int i=0; i<MAX; i++) { if (pos[i].size() % 2 != 0) { oddCount++; oddChar = i; } } /* Palindrome can't contain more than 1 odd characters */ if (oddCount > 1) cout << "NO PALINDROME"; /* Print positions in first half of 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] << " "; } // Consider one instance odd character if (oddCount > 0){ int last = pos[oddChar].size() - 1; cout << pos[oddChar][last] << " "; pos[oddChar].pop_back(); } /* Print positions in second half of palindrome */ 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