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

सी ++ में सबसे लंबे समय तक सामान्य अनुक्रम की लंबाई खोजने का कार्यक्रम

मान लीजिए कि हमारे पास दो स्ट्रिंग्स टेक्स्ट 1 और टेक्स्ट 2 हैं, हमें उनके सबसे लंबे सामान्य बाद की लंबाई का पता लगाना है। जैसा कि हम जानते हैं कि एक स्ट्रिंग के बाद मूल स्ट्रिंग से उत्पन्न एक नई स्ट्रिंग है जिसमें कुछ वर्णों को शेष वर्णों के सापेक्ष क्रम को बदले बिना हटा दिया जाता है। (इसलिए उदाहरण के लिए "अबे" "एबीसीडीई" का परवर्ती है लेकिन "एडीसी" नहीं है)। दो स्ट्रिंग्स का सामान्य अनुवर्ती एक ऐसा क्रम है जो दोनों स्ट्रिंग्स के लिए सामान्य है। इसलिए यदि कोई सामान्य अनुवर्ती नहीं है, तो 0 लौटाएं। यदि इनपुट "abcde", और "ace" जैसा है, तो परिणाम 3 होगा।

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

  • n :=s का आकार, m :=x का आकार

  • यदि या तो n 0 है, या m 0 है, तो वापस 0

  • s :=खाली स्ट्रिंग, s के साथ संयोजित

  • x :=खाली स्ट्रिंग, x के साथ संयोजित

  • रिट:=0

  • क्रम के मैट्रिक्स डीपी को परिभाषित करें (एन + 1) एक्स (एम + 1)

  • मैं के लिए 1 से n की सीमा में

    • j के लिए 1 से m की सीमा में

      • dp[i, j] :=अधिकतम dp[i, j-1] और dp[i-1, j]

      • अगर s[i] =x[j], तो

        • dp[i, j] :=अधिकतम dp[i, j], 1 + dp[i – 1, j – 1]

  • वापसी डीपी [एन, एम]

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int longestCommonSubsequence(string s, string x) {
      int n = s.size();
      int m = x.size();
      if(!n || !m) return 0;
      s = " " + s;
      x = " " + x;
      int ret = 0;
      vector < vector <int> > dp(n + 1, vector <int>(m + 1));
      for(int i = 1; i <= n; i++){
         for(int j = 1; j <= m ; j++){
            dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);
            if(s[i] == x[j]) {
               dp[i][j] = max(dp[i][j], 1 + dp[i - 1][j - 1]);
            }
         }
      }
      return dp[n][m];
   }
};
main(){
   Solution ob;
   cout << (ob.longestCommonSubsequence("abcde", "ace"));
}

इनपुट

"abcde"
"ace"

आउटपुट

3

  1. पायथन में सबसे लंबे समय तक बढ़ते क्रम की लंबाई खोजने का कार्यक्रम

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

  1. पायथन में सबसे लंबे विपर्यय क्रम की लंबाई खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास दो लोअरकेस स्ट्रिंग्स S और T हैं, तो हमें सबसे लंबे एनाग्राम अनुक्रम की लंबाई ज्ञात करनी होगी। इसलिए, यदि इनपुट S =helloworld, T =hellolorld जैसा है, तो आउटपुट 8 होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - सी:=एक नया नक्शा, डी:=एक नया नक्शा मैं के लिए 0 से

  1. पायथन में सबसे लंबे समय तक संतुलित बाद की लंबाई खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक स्ट्रिंग s है जिसमें कोष्ठक कोष्ठक ( और ) है, हमें संतुलित कोष्ठकों के सबसे लंबे बाद के क्रम की लंबाई ज्ञात करनी है। इसलिए, यदि इनपुट s =())(()( जैसा है, तो आउटपुट 4 होगा, क्योंकि हम बाद में ()() ले सकते हैं। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - रेस :=0