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

अधिकतम सम लंबाई वाली उप-स्ट्रिंग जो C++ में पैलिंड्रोम का क्रमपरिवर्तन है

समस्या कथन

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

उदाहरण

यदि इनपुट स्ट्रिंग ="5432112356" तो उत्तर 6 है क्योंकि अधिकतम पैलिंड्रोम विकल्प "321123" है और इसकी लंबाई 6

है

एल्गोरिदम

  • यदि उप-स्ट्रिंग की लंबाई विषम है, तो इसे अंतिम समाधान में नहीं माना जा सकता है।
  • यदि उप-स्ट्रिंग की लंबाई सम है, तो यह एक संभावित समाधान तभी हो सकता है जब उस उप-स्ट्रिंग में प्रत्येक वर्ण सम संख्या में आता है जिसे डिक्शनरी काउंट का उपयोग करके किया जा सकता है। हम जाँचते हैं कि प्रत्येक वर्ण सम संख्या में आता है या नहीं। यदि हां, तो हम इसे संभावित समाधानों में से एक के रूप में शामिल करते हैं। फिर हम स्ट्रिंग में अगले वर्ण को शामिल करके अगला उप-स्ट्रिंग बनाते हैं जो कि केवल अंत में वृद्धि करके किया जा सकता है और पुनरावर्ती जांच कर सकता है कि क्या अधिक लंबाई वाली उप-स्ट्रिंग बनाई जा सकती है जो दी गई शर्तों को पूरा करती है और सभी संभव को अधिकतम लौटाती है समाधान

उदाहरण

#include <bits/stdc++.h>
using namespace std;
unordered_map<int, int> countt;
bool isPalindromePossible(unordered_map<int, int> &countt) {
   for (auto key : countt) {
      if (key.second & 1) {                                                        
         return false;
      }
      return true;
   }
   int getMaxPalindrome(string str, unordered_map<int, int> &countt, int start, int end) {
      if (end == str.length()) {
         if ((end - start) % 2 == 0)
         if (isPalindromePossible(countt))
         return end - start;
         return 0;
      } else {
      if ((end - start) % 2 == 0) {
         if (isPalindromePossible(countt)) {
            countt[str[end]]++;
            return max(end - start, getMaxPalindrome(str, countt, start, end + 1));
         } else {
            countt[str[end]]++;
            return getMaxPalindrome(str, countt, start, end + 1);
         }
      } else {
         countt[str[end]]++;
         unordered_map<int, int>
         c(countt.begin(), countt.end());
         int length = getMaxPalindrome(str, c, start, end + 1);
         countt[str[end]]--;
         countt[str[start]]--;
         return max(length, getMaxPalindrome(str, countt, start + 1, end));
      }
   }
}
int main(int argc, char const *argv[]) {
   string str = "5432112356";
   int start = 0, end = 0;
   cout << "Maximum palindrome length = " << getMaxPalindrome(str, countt, start, end) << endl;
   return 0;
}

आउटपुट

जब आप उपरोक्त प्रोग्राम को संकलित और निष्पादित करते हैं। यह निम्नलिखित आउटपुट उत्पन्न करता है -

Maximum palindrome length = 6

  1. सी ++ में एक स्ट्रिंग से पहली अधिकतम लंबाई भी शब्द खोजें

    इस समस्या में, हम अल्पविराम से अलग किए गए शब्दों से मिलकर एक स्ट्रिंग स्ट्रिंग हैं। हमारा काम है एक स्ट्रिंग से पहली अधिकतम लंबाई, यहां तक ​​कि शब्द, ढूंढना । हमें सबसे बड़ा शब्द दो रिक्त स्थान के बीच की स्ट्रिंग खोजने की जरूरत है जिसकी लंबाई अधिकतम और सम हो। समस्या को समझने के लिए एक उदाहरण लेते

  1. C++ में ग्राफ़ का अधिकतम मान क्रमपरिवर्तन ज्ञात कीजिए

    इस समस्या में, हमें N नोड्स का एक ग्राफ दिया गया है। हमारा कार्य संशोधित सरणी के न्यूनतम मान का अधिकतम संभव मान ज्ञात करना है। ग्राफ़ के लिए हमारे पास नोड्स का एक क्रमचय है जो कि एक सामान्य किनारे को साझा करने के बाईं ओर न्यूनतम 1 नोड के साथ प्रेरितों की संख्या है। समस्या को समझने के लिए एक उदाहर

  1. C++ का उपयोग करके वां सम लेंथ पैलिंड्रोम ज्ञात कीजिए

    अगर आपने कभी C++ का इस्तेमाल किया है तो आपने Palindrome Numbers के बारे में जरूर सुना होगा। तो इस गाइड में, हम उपयुक्त उदाहरणों का उपयोग करते हुए Nth सम-लेंथ पैलिंड्रोम के बारे में सब कुछ समझाएंगे। पैलिंड्रोम संख्याएँ वे संख्याएँ होती हैं जो उलटने के बाद भी वही रहती हैं। केवल संख्या ही नहीं बल्कि एक