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

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


समस्या कथन

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

उदाहरण

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

एल्गोरिदम

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

उदाहरण

#include <bits/stdc++.h> 
using namespace std; 

unordered_map countt;

bool isPalindromePossible(unordered_map& countt) {
    for (auto key : countt) {
        if (key.second & 1) {
            return false;
        }
        return true;
    }
}

int getMaxPalindrome(string str, unordered_map& 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 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. - C++ में स्ट्रिंग से पहली अधिकतम लंबाई वाला सम शब्द ज्ञात करें

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

  1. - ग्राफ के अधिकतम मान क्रमचय को ज्ञात करें C++ में

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

  1. C++ का उपयोग करके Nवां सम-लंबाई पालिंड्रोम ढूंढें C++ का उपयोग करके Nवां सम-लंबाई पालिंड्रोम ढूंढें

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