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

C++ में पैलिंड्रोम विभाजन (Palindrome Partitioning)


मान लीजिए हमारे पास एक इनपुट स्ट्रिंग है, उस स्ट्रिंग का एक विभाजन पैलिंड्रोम विभाजन है, जब विभाजन का हर उपस्ट्रिंग एक पैलिंड्रोम हो। इस खंड में, हमें दी गई स्ट्रिंग को पैलिंड्रोम विभाजन करने के लिए आवश्यक न्यूनतम कट (minimum cuts) ढूंढने हैं। यदि स्ट्रिंग "ababbbabbababa" है, तो पैलिंड्रोम के रूप में विभाजन के लिए न्यूनतम कट। यहां 3 कट की आवश्यकता है। पैलिंड्रोम हैं: a | babbbab | b | ababa

इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:

  • n := str की लंबाई
  • cut मैट्रिक्स और pal मैट्रिक्स परिभाषित करें प्रत्येक n x n क्रम की
  • i := 0 से n तक:
    • pal[i, i] := true और cut[i, i] := 0
  • len को 2 से n तक की रेंज में:
    • i को 0 से n – len तक की रेंज में:
      • j := i + len – 1
      • यदि len = 2, तो:
        • यदि str[i] = str[j], तो pal[i, j] := true
      • अन्यथा जब str[i] = str[j] और pal[i+1, j-1] ≠ 0, तो pal[i, j] := true
      • यदि pal[i, j] true है, तो cut[i, j] := 0
      • अन्यथा:
        • cut[i, j] := ∞
        • k को i से j-1 तक की रेंज में:
          • cut[i, j] := cut[i, j] और (cut[i, k] + cut[k+1, j] + 1) का न्यूनतम
  • cut[0, n-1] वापस करें

उदाहरण

#include <iostream>
#include <climits>
using namespace std;

int min(int a, int b){
    return (a < b) ? a : b;
}

int minPalPartion(string str){
    int n = str.size();
    int cut[n][n];
    bool pal[n][n];
    for (int i = 0; i < n; i++){
        pal[i][i] = true;
        cut[i][i] = 0;
    }
    for (int len = 2; len <= n; len++){
        for (int i = 0; i < n - len + 1; i++){
            int j = i + len - 1;
            if (len == 2)
                pal[i][j] = (str[i] == str[j]);
            else
                pal[i][j] = (str[i] == str[j]) && pal[i+1][j-1];
            if (pal[i][j] == true)
                cut[i][j] = 0;
            else{
                cut[i][j] = INT_MAX;
                for (int k = i; k <= j-1; k++)
                    cut[i][j] = min(cut[i][j], cut[i][k] + cut[k+1][j] + 1);
            }
        }
    }
    return cut[0][n-1];
}

int main(){
    string str = "ababbbabbababa";
    cout << "पैलिंड्रोम विभाजन के लिए न्यूनतम कट: " << minPalPartion(str);
}

इनपुट

ababbbabbababa

आउटपुट

पैलिंड्रोम विभाजन के लिए न्यूनतम कट: 3
  1. - C++ में 4Sum समस्या

    मान लीजिए हमारे पास संख्याओं की एक सरणी है। यह n पूर्णांकों को संग्रहीत करती है, सरणी में चार तत्व a, b, c और d हैं। हमारे पास एक और लक्ष्य मान है, जैसे कि a + b + c + d = लक्ष्य। सरणी में सभी अद्वितीय चौगुनी (quadruplets) ढूंढें जो स्थिति को संतुष्ट करते हैं। तो यदि सरणी [-1,0,1,2,0,-2] जैसी है और

  1. - C++ में पेलिंड्रोम परम्यूटेशन बनाने के लिए न्यूनतम निष्कासन

    समस्या कथनएक स्ट्रिंग S दी गई है, हमें न्यूनतम वर्ण खोजने हैं जिन्हें हम हटा सकते हैं ताकि स्ट्रिंग S का कोई भी परम्यूटेशन पेलिंड्रोम बन जाएउदाहरणयदि str = abcdba तो हम 1 वर्ण हटाते हैं यानी या तो c या d।एल्गोरिदम1. पेलिंड्रोम दो प्रकार के हो सकते हैं, सम लंबाई, और विषम लंबाई पेलिंड्रोम 2. हम इस तथ्

  1. - C++ में static_cast

    static_cast का उपयोग सामान्य/साधारण प्रकार रूपांतरण के लिए किया जाता है। यह निहित प्रकार जबरदस्ती (implicit type coercion) के लिए भी जिम्मेदार कास्ट है और इसे स्पष्ट रूप से भी बुलाया जा सकता है। आपको इसका उपयोग फ्लोट को इंट में, चार को इंट में आदि जैसे मामलों में करना चाहिए। यह संबंधित प्रकार के क्