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

C++ में सबसे लंबा पैलिंड्रोमिक परिणाम

मान लीजिए कि हमारे पास एक स्ट्रिंग s है, हमें s में सबसे लंबे पैलिंड्रोमिक अनुक्रम की लंबाई ज्ञात करनी है। हम मान सकते हैं कि s की अधिकतम लंबाई 1000 है। इसलिए यदि इनपुट "bbbab" जैसा है, तो आउटपुट 4 होगा। एक संभावित पैलिंड्रोमिक क्रम "bbbb" है।

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

  • x :=s, फिर x को उल्टा करें, n :=s का आकार
  • अगर n 0 है, तो 0 लौटाएं
  • s से पहले एक रिक्त स्थान जोड़कर अद्यतन करें, और x से पहले एक रिक्त स्थान जोड़कर x को अपडेट करें
  • रिट:=0
  • आकार का एक मैट्रिक्स डीपी बनाएं (n + 1) x (n + 1)
  • मैं के लिए 1 से n की सीमा में
    • जे के लिए n से n की श्रेणी में
      • dp[i, j] :=अधिकतम dp[i, j-1], dp[i-1, j]
      • यदि x[i] =s[j], तो dp[i, j] :=अधिकतम dp[i, j] और 1 + dp[i – 1, j – 1]
  • रिटर्न डीपी[एन, एन]

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int longestPalindromeSubseq(string s) {
      string x = s;
      reverse(x.begin(), x.end());
      int n = s.size();
      if(!n) return 0;
      s = " " + s;
      x = " " + x;
      int ret = 0;
      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][j - 1], dp[i - 1][j]);
            if(x[i] == s[j]) {
               dp[i][j] = max(dp[i][j], 1 + dp[i - 1][j - 1]);
            }
         }
      }
      return dp[n][n];
   }
};
main(){
   Solution ob;
   cout << (ob.longestPalindromeSubseq("bbbab"));
}

इनपुट

"bbbab"

आउटपुट

4

  1. C++ में दिए गए अंतर का सबसे लंबा अंकगणितीय क्रम

    मान लीजिए कि हमारे पास एक पूर्णांक सरणी arr और एक पूर्णांक अंतर है, हमें arr में सबसे लंबे बाद की लंबाई का पता लगाना है जो एक अंकगणितीय अनुक्रम है जैसे कि बाद में आसन्न तत्वों के बीच का अंतर अंतर के समान है। तो अगर इनपुट [1,5,7,8,5,3,4,2,1] जैसा है और अंतर -2 है, तो आउटपुट -4 होगा, क्योंकि सबसे लंबा

  1. C++ में सबसे लंबे समय तक बढ़ते क्रम की संख्या

    मान लीजिए कि हमारे पास पूर्णांकों की एक क्रमबद्ध श्रेणी नहीं है। हमें सबसे लंबे समय तक बढ़ते क्रम की संख्या ज्ञात करनी है, इसलिए यदि इनपुट [1, 3, 5, 4, 7] जैसा है, तो आउटपुट 2 होगा, क्योंकि बढ़ते क्रम [1,3,5,7] हैं और [1, 3, 4, 7] इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - n :=संख्या सरणी का

  1. सबसे लंबे समय तक सामान्य बाद के लिए सी ++ कार्यक्रम

    एक अनुक्रम तत्वों के सेट के समान क्रम वाला अनुक्रम है। अनुक्रम स्टुव के लिए, अनुवर्ती स्टु, तुव, एसयूवी, .... आदि हैं। लंबाई n की एक स्ट्रिंग के लिए, स्ट्रिंग से अनुवर्ती बनाने के 2n तरीके हो सकते हैं। उदाहरण एबीसीडीजीएच और एईडीएफएचआर स्ट्रिंग्स के लिए सबसे लंबा सामान्य अनुक्रम लंबाई 3 का है। #inc