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

सी++ में स्ट्रिंग पैलिंड्रोम बनाने के लिए न्यूनतम निवेशन चरण

मान लीजिए कि हमारे पास एक स्ट्रिंग है, हमें यह स्ट्रिंग पैलिंड्रोम बनाना है। प्रत्येक चरण में हम किसी भी स्थिति में किसी भी वर्ण को सम्मिलित कर सकते हैं, हमें इस पैलिंड्रोम को बनाने के लिए आवश्यक वर्णों की न्यूनतम संख्या ज्ञात करनी होगी। यदि स्ट्रिंग "पागल" की तरह है, तो उत्तर 2 होगा क्योंकि हम इस पैलिंड्रोम को बनाने के लिए "पागल" से पहले "दा" या "पागल" के बाद "एम" जोड़ सकते हैं।

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

  • एक फ़ंक्शन को परिभाषित करें lcs(), इसमें s, x:=s लगेगा
  • n :=आकार का
  • स्ट्रिंग x को उल्टा करें
  • s :=s से पहले स्पेस को जोड़ना, x :=x से पहले स्पेस को जोड़ना
  • एक 2D सरणी dp आकार (n + 1) x (n + 1) परिभाषित करें
  • इनिशियलाइज़ i :=1 के लिए, जब i <=n, अपडेट करें (i को 1 से बढ़ाएँ), −
      करें
    • इनिशियलाइज़ j :=1 के लिए, जब j <=n, अपडेट करें (j को 1 से बढ़ाएँ), −
        करें
      • dp[i, j] :=अधिकतम dp[i – 1, j] और dp[i, j-1]
      • यदि s[i] x[j] के समान है, तो −
        • dp[i, j] :=अधिकतम dp[i, j] और dp[i – 1, j-1] + 1
  • रिटर्न डीपी[एन, एन]
  • मुख्य विधि से s – lcs(s) का आकार लौटाएं

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int lcs(string s){
      string x = s;
      int n = s.size();
      reverse(x.begin(), x.end());
      s = " " + s;
      x = " " + x;
      vector < vector <int> > dp(n + 1, vector <int>(n + 1));
      for(int i = 1; i <= n; i++){
         for(int j = 1; j <= n; j++){
            dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
            if(s[i] == x[j]){
               dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + 1);
            }
         }
      }
      return dp[n][n];
   }
   int minInsertions(string s) {
      return s.size() - lcs(s);
   }
};
main(){
   Solution ob;
   cout << (ob.minInsertions("mad"));
}

इनपुट

“mad”

आउटपुट

2

  1. सी++ में एक स्ट्रिंग पैलिंड्रोम बनाने के लिए आवश्यक परिशिष्टों की न्यूनतम संख्या

    समस्या कथन एक स्ट्रिंग को देखते हुए, स्ट्रिंग पैलिंड्रोम बनाने के लिए जोड़े जाने वाले न्यूनतम वर्ण खोजें। उदाहरण यदि स्ट्रिंग abcac है तो हम 2 हाइलाइट किए गए वर्णों यानी abcacba को जोड़कर स्ट्रिंग पैलिंड्रोम बना सकते हैं एल्गोरिदम जांचें कि क्या स्ट्रिंग पहले से ही पैलिंड्रोम है, यदि हाँ तो कोई व

  1. C++ में सभी स्ट्रिंग्स को समान बनाने के लिए न्यूनतम चाल से अंत संचालन

    समस्या कथन दिए गए n तार जो एक दूसरे के क्रमपरिवर्तन हैं। हमें एक ऑपरेशन के साथ सभी स्ट्रिंग्स को समान बनाने की आवश्यकता है जो किसी भी स्ट्रिंग के पहले अक्षर को उसके अंत तक ले जाती है। उदाहरण अगर arr[] ={abcd, cdab} तो 2 चालों की आवश्यकता है। आइए हम पहली स्ट्रिंग abcd लेते हैं। वर्ण a को स्ट्रिंग

  1. C++ में एक स्ट्रिंग पैलिंड्रोम बनाने के लिए विलोपन की न्यूनतम संख्या।

    समस्या कथन आकार एन की एक स्ट्रिंग को देखते हुए। कार्य स्ट्रिंग पैलिंड्रोम बनाने के लिए वर्णों की न्यूनतम संख्या को हटाना है। यदि दी गई स्ट्रिंग abcda है तो हम इसे पैलिंड्रोम बनाने के लिए पहले और अंतिम को छोड़कर किन्हीं भी 2 वर्णों को हटा सकते हैं। अगर हम अक्षर b और c को हटाते हैं तो ada स्ट्रिं