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

सी++ में पैलिंड्रोम विभाजन


मान लीजिए कि हमारे पास एक इनपुट स्ट्रिंग है, उस स्ट्रिंग का एक विभाजन पैलिंड्रोम विभाजन है, जब विभाजन का प्रत्येक विकल्प एक पैलिंड्रोम होता है। इस खंड में, हमें दिए गए स्ट्रिंग को विभाजित करने वाले पैलिंड्रोम के लिए आवश्यक न्यूनतम कटौती का पता लगाना है। तो अगर स्ट्रिंग "अब्बाबबाबाबाबा" की तरह है, तो पैलिंड्रोम के रूप में विभाजन के लिए न्यूनतम कटौती। यहां 3 कट की जरूरत है। पैलिंड्रोम हैं:a | बब्बब | बी | अबाबा

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • n :=str की लंबाई
  • कट मैट्रिक्स और पाल मैट्रिक्स को प्रत्येक क्रम n x n परिभाषित करें
  • i :=0 से n के लिए, करें
    • pal[i, i] :=true and cut[i, i] :=0
  • लेन के लिए 2 से n तक, करें
    • मैं के लिए 0 से n - लेन की सीमा में, करते हैं
      • j :=i + len – 1
      • यदि लेन =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] सच है, तो कट[i, j] :=0
      • अन्य
        • कट[i, j] :=
        • k के लिए i से j-1 की श्रेणी में, करें
          • कट[i, j] :=न्यूनतम कट[i, j] और (कट[i, k]+ कट[k+1, j+1]+1)
  • रिटर्न कट[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]; //true when palindrome present for i to j th element
   for (int i=0; i<n; i++){
      pal[i][i] = true; //substring of length 1 is plaindrome
      cut[i][i] = 0;
   }
   for (int len=2; len<=n; len++){
      for (int i=0; i<n-len+1; i++){//find all substrings of length len
      int j = i+len-1; // Set ending index
      if (len == 2) //for two character string
         pal[i][j] = (str[i] == str[j]);
      else //for string of more than two characters
         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; //initially set as infinity
         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 << "Min cuts for Palindrome Partitioning is: "<<minPalPartion(str);
}

इनपुट

ababbbabbababa

आउटपुट

Min cuts for Palindrome Partitioning is: 3

  1. सी++ में 4सम

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

  1. C++ में पैलिंड्रोम क्रमपरिवर्तन करने के लिए न्यूनतम निष्कासन

    समस्या कथन एक स्ट्रिंग S को देखते हुए, हमें न्यूनतम वर्ण खोजने होंगे जिन्हें हम स्ट्रिंग S के किसी भी क्रमपरिवर्तन को एक पैलिंड्रोम बनाने के लिए हटा सकते हैं उदाहरण यदि str =abcdba है तो हम 1 वर्ण यानी c या d को हटा देते हैं। एल्गोरिदम 1. There can be two types of a palindrome, even length, and od

  1. सी ++ में static_cast

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