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

C++ प्रोग्रामिंग में विशिष्ट सबसीक्वेंस


समस्या विवरण

मान लीजिए हमारे पास स्ट्रिंग्स S और T हैं। हमें S के विशिष्ट अनुक्रमों की संख्या गिननी है जो T के बराबर हैं।

हम जानते हैं कि एक स्ट्रिंग का सबसीक्वेंस एक नई स्ट्रिंग है जो मूल स्ट्रिंग से कुछ (शून्य हो सकते हैं) वर्णों को हटाकर बनाई जाती है, बिना शेष वर्णों की सापेक्ष स्थिति को बदले। (जैसे, "ACE", "ABCDE" का सबसीक्वेंस है जबकि "AEC" नहीं)।

यदि इनपुट स्ट्रिंग्स "baalllloonnn" और "balloon" हैं, तो चयन के 36 अलग-अलग तरीके होंगे।

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

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

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

C++ कार्यान्वयन

#include <bits/stdc++.h>
using namespace std;

typedef long long int lli;

class Solution {
public:
    int numDistinct(string s, string t) {
        int n = s.size();
        int m = t.size();
        s = " " + s;
        t = " " + t;
        vector<vector<lli>> dp(n + 1, vector<lli>(m + 1));
        dp[0][0] = 1;
        for(int i = 1; i <= n; i++) dp[i][0] = 1;
        for(int i = 1; i <= n; i++) {
            for(int j = 1; j <= m; j++) {
                if(s[i] == t[j]) dp[i][j] = dp[i - 1][j - 1];
                dp[i][j] += dp[i - 1][j];
            }
        }
        return dp[n][m];
    }
};

int main() {
    Solution ob;
    cout << (ob.numDistinct("baalllloonnn", "balloon"));
    return 0;
}

इनपुट

"baalllloonnn" "balloon"

आउटपुट

36
  1. C++ में बेसिक ग्राफिक्स प्रोग्रामिंग C++ में बेसिक ग्राफिक्स प्रोग्रामिंग

    C++ प्रोग्रामिंग लैंग्वेज एक बहुमुखी प्रोग्रामिंग लैंग्वेज है। C++ का उपयोग करके आप लो-एंड ग्राफिक्स भी बना सकते हैं यानी बेसिक शेप्स और स्टाइलिश फॉन्ट्स के साथ शब्द बनाना और उनमें रंग जोड़ना C++ का उपयोग करके किया जा सकता है। ग्राफिक्स प्रोग्रामिंग C++ में आपके टर्मिनल या कमांड प्रॉम्प्ट का उपयोग क

  1. - C++ प्रोग्रामिंग भाषा की विशेषताएं

    C++ को एक मिडिल-लेवल भाषा माना जाता है, क्योंकि इसमें हाई-लेवल और लो-लेवल दोनों भाषा विशेषताओं का संयोजन होता है। यह C का सुपरसेट है, और वस्तुतः कोई भी वैध C प्रोग्राम एक वैध C++ प्रोग्राम है। C++ विभिन्न प्लेटफॉर्म्स पर चलता है, जैसे Windows, Mac OS, और UNIX के विभिन्न संस्करण। निम्नलिखित C++ की कु

  1. - C++ प्रोग्रामिंग भाषा क्या है?

    C++ एक प्रोग्रामिंग भाषा है जिसे ब्यार्ने स्ट्रॉस्ट्रप द्वारा 1979 में बेल लैब्स में विकसित किया गया था। C++ को एक मिडिल-लेवल भाषा माना जाता है, क्योंकि इसमें हाई-लेवल और लो-लेवल दोनों भाषा विशेषताओं का संयोजन होता है। यह C का सुपरसेट है, और वस्तुतः कोई भी वैध C प्रोग्राम एक वैध C++ प्रोग्राम है। C+