Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में स्ट्रिंग से वर्णों को हटाकर या फेरबदल करके बना सबसे लंबा पैलिंड्रोम खोजें


अवधारणा

एक दी गई स्ट्रिंग के संबंध में, उस सबसे लंबे पैलिंड्रोम को निर्धारित करें जिसे स्ट्रिंग से वर्णों को हटाकर या फेरबदल करके बनाया जा सकता है। अंत में केवल एक पैलिंड्रोम लौटाएं यदि यह देखा गया है कि सबसे लंबी लंबाई के कई पैलिंड्रोम स्ट्रिंग्स हैं।

इनपुट

pqr

आउटपुट

p OR q OR r

इनपुट

ppqqrr

आउटपुट

pqrrqp OR qprrpq OR rqppqr OR लंबाई 6 का कोई अन्य पैलिंड्रोमिक स्ट्रिंग।

इनपुट

pqp

आउटपुट

pqp

विधि

यहां, हम किसी भी पैलिंड्रोमिक स्ट्रिंग को तीन भागों में विभाजित कर सकते हैं – beg, mid और end। विषम लंबाई के पैलिंड्रोमिक स्ट्रिंग के संबंध में मान लें 2n + 1, यहां 'beg' में स्ट्रिंग के पहले n वर्ण होते हैं, 'mid' में केवल 1 वर्ण होता है यानी (n + 1)वां वर्ण और 'end' में पैलिंड्रोमिक स्ट्रिंग के अंतिम n वर्ण होते हैं। सम लंबाई 2n के पैलिंड्रोमिक स्ट्रिंग के संबंध में, 'mid' में हमेशा खाली होगा। हम पहले से जानते हैं कि स्ट्रिंग के पैलिंड्रोम होने के लिए क्रम के संबंध में 'end', 'beg' का उल्टा होगा। अब अवधारणा हमारे समाधान में उपरोक्त अवलोकन को लागू करना है। क्योंकि वर्णों का फेरबदल अनुमत है, इनपुट स्ट्रिंग में वर्णों के क्रम की कोई बात नहीं है। अब हम पहले इनपुट स्ट्रिंग में प्रत्येक वर्ण की आवृत्ति प्राप्त करते हैं। उसके बाद इनपुट स्ट्रिंग में सम घटना वाले सभी वर्ण (मान लें 2n) आउटपुट स्ट्रिंग का हिस्सा होंगे क्योंकि हम आसानी से n वर्णों को 'beg' स्ट्रिंग में सेट कर सकते हैं और अन्य n वर्ण 'end' स्ट्रिंग में बनाएंगे (पैलिंड्रोमिक क्रम को बनाए रखने में मदद से)। विषम घटना वाले वर्णों (मान लें 2n + 1) के संबंध में, यहां, हम 'mid' को ऐसे सभी वर्णों में से एक से भरते हैं और शेष 2n वर्णों को आधे में विभाजित करते हैं और शुरुआत और अंत में जोड़ते हैं।

उदाहरण

// C++ program to find the longest palindrome by removing // or shuffling characters from the given string #include <bits/stdc++.h> using namespace std; // दी गई स्ट्रिंग से वर्णों को हटाकर या फेरबदल करके सबसे लंबा पैलिंड्रोम खोजने वाला फ़ंक्शन string findLongestPalindrome(string str1){    // एक स्ट्रिंग में वर्णों की आवृत्ति संग्रहीत करने के लिए इंगित किया जाता है    int count1[256] = { 0 };    // इनपुट स्ट्रिंग में वर्णों की आवृत्ति निर्धारित करें    for (int i = 0; i < str1.size(); i++)       count1[str1[i]]++;    // कोई भी पैलिंड्रोमिक स्ट्रिंग जिसमें तीन भाग होते हैं    // beg1 + mid1 + end1    string beg1 = "", mid1 = "", end1 = "";    //यह समाधान मानता है कि स्ट्रिंग में केवल लोअरकेस वर्ण हैं    // मौजूद हैं। हम इसे आसानी से बढ़ा सकते हैं    // वर्णों के किसी भी सेट पर विचार करने के लिए    for (char ch1 = 'a'; ch1 <= 'z'; ch1++){       // अब यदि वर्तमान वर्ण की आवृत्ति विषम है    if (count1[ch1] & 1){       // यहां mid1 में केवल 1 वर्ण होगा। यह       // अगले वर्ण के साथ ओवरराइड हो जाएगा       // जिसकी विषम आवृत्ति है       mid1 = ch1;       // वर्ण की आवृत्ति को घटाकर       // इसे सम बनाएं और वर्तमान वर्ण को       // फिर से विचार करें       count1[ch1--]--;    }    // यहां यदि वर्तमान वर्ण की आवृत्ति सम है    else{       // अब यदि गिनती n (एक सम संख्या) है, तो पुश करें       // n/2 वर्णों को beg स्ट्रिंग में और शेष       // n/2 वर्ण end स्ट्रिंग का हिस्सा बनेंगे       for (int i = 0; i < count1[ch1]/2 ; i++)          beg1.push_back(ch1);       }    }    // यहां end, beg का उल्टा होगा    end1 = beg1;    reverse(end1.begin(), end1.end());    // अब पैलिंड्रोम स्ट्रिंग लौटाएं    return beg1 + mid1 + end1; } // ड्राइवर कोड int main(){    string str1 = "pqqprrs";    cout << findLongestPalindrome(str1);    return 0; }

आउटपुट

pqrsrqp

  1. - C++ में डिक्रिप्टेड स्ट्रिंग का k-वां वर्ण ज्ञात करें

    मान लीजिए हमारे पास एक एन्कोडेड स्ट्रिंग है, जहां उपस्ट्रिंग्स की पुनरावृत्ति को उपस्ट्रिंग के बाद उपस्ट्रिंग्स की संख्या के रूप में दर्शाया जाता है। इसलिए यदि स्ट्रिंग ab2cd2 की तरह है, तो यह ababcdcd को इंगित करती है, और यदि k = 4, तो यह k-वां वर्ण वापस करेगी, जो यहां b है। इसे हल करने के लिए, हम

  1. - C++ में स्ट्रिंग से स्वर (Vowels) हटाएं

    निम्नलिखित C++ प्रोग्राम दर्शाता है कि किसी दी गई स्ट्रिंग से स्वर (a, e, i, u, o) कैसे हटाए जाएं। इस संदर्भ में, हम एक नई स्ट्रिंग बनाते हैं और इनपुट स्ट्रिंग को वर्ण दर वर्ण संसाधित करते हैं, और यदि कोई स्वर मिलता है तो उसे नई स्ट्रिंग में बाहर रखा जाता है, अन्यथा वर्ण को स्ट्रिंग समाप्त होने के ब

  1. - Python में स्ट्रिंग से वर्ण हटाकर या फेरबदल करके बना सबसे लंबा पैलिंड्रोम ढूंढना

    मान लीजिए हमारे पास एक स्ट्रिंग है; हमें स्ट्रिंग से वर्णों को हटाकर या फेरबदल करके उत्पन्न होने वाला सबसे लंबा पैलिंड्रोम ढूंढना है। और यदि एक से अधिक पैलिंड्रोम हैं तो केवल एक वापस करें। तो, यदि इनपुट pqqprrs की तरह है, तो आउटपुट pqrsrqp होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - coun