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

C++ में सबसे लंबा पालिंड्रोमिक उपअनुक्रम


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

हल का दृष्टिकोण

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

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

उदाहरण

#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]; 
    } 
}; 

int main(){ 
    Solution ob; 
    cout << (ob.longestPalindromeSubseq("bbbab")); 
}

इनपुट

"bbbab"

आउटपुट

4

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

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

  1. - C++ में Number of Longest Increasing Subsequence

    मान लीजिए हमारे पास पूर्णांकों की एक अक्रमबद्ध सरणी है। हमें सबसे लंबी बढ़ती उपअनुक्रम (longest increasing subsequence) की संख्या ढूंढनी है, इसलिए यदि इनपुट [1, 3, 5, 4, 7] जैसा है, तो आउटपुट 2 होगा, क्योंकि बढ़ते उपअनुक्रम [1,3,5,7] और [1, 3, 4, 7] हैं।इसे हल करने के लिए, हम इन चरणों का पालन करेंगे

  1. - C++ प्रोग्राम: लॉन्गेस्ट कॉमन सबसीक्वेंस (LCS)

    एक सबसीक्वेंस तत्वों के समूह का वही क्रम वाला अनुक्रम है। अनुक्रम stuv के लिए, सबसीक्वेंस हैं stu, tuv, suv, आदि। लंबाई n के एक स्ट्रिंग के लिए, उस स्ट्रिंग से सबसीक्वेंस बनाने के 2^n तरीके हो सकते हैं। उदाहरण स्ट्रिंग्स ABCDGH और AEDFHR के लिए सबसे लंबी सामान्य सबसीक्वेंस की लंबाई 3 है। #include &l