हमें एक स्ट्रिंग str दिया जाता है। लक्ष्य str के सभी सबस्ट्रिंग को गिनना है जो विशेष पैलिंड्रोम हैं और जिनकी लंबाई 1 से अधिक है। विशेष पैलिंड्रोम ऐसे तार होते हैं जिनमें या तो सभी समान वर्ण होते हैं या केवल मध्य वर्ण भिन्न होते हैं। उदाहरण के लिए यदि स्ट्रिंग "बाबा" है तो विशेष पैलिंड्रोम जो मूल के स्थानापन्न हैं, वे हैं "आ", "आबा", "अबा", "आ"
आइए उदाहरणों से समझते हैं।
इनपुट - str="abccdcdf"
आउटपुट - एक स्ट्रिंग में विशेष पैलिंड्रोम की संख्या है - 3
स्पष्टीकरण − वे सबस्ट्रिंग जो विशेष पैलिंड्रोम हैं - "cc", "cdc", "dcd"
इनपुट - str="बाबाब"
आउटपुट - एक स्ट्रिंग में विशेष पैलिंड्रोम की संख्या है - 4
स्पष्टीकरण - सबस्ट्रिंग जो विशेष पैलिंड्रोम हैं - "आ", "आबा", "अबा", "आ"
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
-
अक्षरों की एक स्ट्रिंग बनाएं और इसकी लंबाई की गणना करें। आगे की प्रक्रिया के लिए डेटा को फ़ंक्शन में पास करें।
-
अस्थायी चरों की गिनती और i घोषित करें और उन्हें 0 पर सेट करें
-
एक स्ट्रिंग के आकार की एक सरणी बनाएं और इसे 0 से प्रारंभ करें।
-
तब तक शुरू करें जब तक कि मैं एक स्ट्रिंग की लंबाई से कम नहीं हो जाता
-
थोड़ी देर के अंदर, एक वेरिएबल को कुल 1 और एक वेरिएबल j को i + 1 पर सेट करें
-
दूसरा तब तक शुरू करें जब तक कि str[i] =str[j] और j एक स्ट्रिंग की लंबाई से कम न हो
-
थोड़ी देर के अंदर, कुल को 1 और j को 1 से बढ़ाएँ
-
गिनती को गिनती के रूप में सेट करें + (कुल * (कुल + 1) / 2, गिरफ्तारी [i] कुल और i से j
-
एक स्ट्रिंग की लंबाई तक j से 1 तक के लिए लूप प्रारंभ करें
-
जांचें कि क्या str[j] =str[j-1] फिर arr[j] को arr[j-1]
पर सेट करें -
एक चर अस्थायी को str[j-1] पर सेट करें और जांचें कि क्या j> 0 और j <एक स्ट्रिंग की लंबाई कम है और temp =str[j+1] और sr[j]!=temp फिर गिनती के रूप में सेट करें + मिनट (गिरफ्तारी [जे -1], गिरफ्तारी [जे + 1])
-
गिनती को गिनती सेट करें - एक स्ट्रिंग की लंबाई
-
गिनती लौटाएं
-
परिणाम प्रिंट करें।
उदाहरण
#include <bits/stdc++.h> using namespace std; int count_palindromes(string str, int len){ int count = 0, i = 0; int arr[len] = { 0 }; while (i < len){ int total = 1; int j = i + 1; while (str[i] == str[j] && j < len){ total++; j++; } count += (total * (total + 1) / 2); arr[i] = total; i = j; } for (int j = 1; j < len; j++){ if (str[j] == str[j - 1]){ arr[j] = arr[j - 1]; } int temp = str[j - 1]; if (j > 0 && j < (len - 1) && (temp == str[j + 1] && str[j] != temp)){ count += min(arr[j-1], arr[j+1]); } } count = count - len; return count; } int main(){ string str = "bcbaba"; int len = str.length(); cout<<"Count of special palindromes in a String are: "<< count_palindromes(str, len); return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
Count of special palindromes in a String are: 3