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

C++ में विशिष्ट परिणाम

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

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

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

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

  • n :=s का आकार, m :=t का आकार। s और t को उनके सामने रिक्त स्थान जोड़कर अपडेट करें

  • आकार का एक मैट्रिक्स बनाएं (n + 1) x (m + 1)

  • dp[0, 0] :=1 सेट करें, फिर सभी पंक्ति के 0वें कॉलम के लिए 1 सेट करें, 1 डालें

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

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

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

        • डीपी [आई, जे]:=डीपी [i - 1, जे - 1]

      • डीपी [i, j]:=dp [i, j] + dp [i – 1, j]

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

उदाहरण

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

#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];
   }
};
main(){
   Solution ob;
   cout << (ob.numDistinct("baalllloonnn", "balloon"));
}

इनपुट

"baalllloonnn"
"balloon"

आउटपुट

36

  1. C++ में सभी बढ़ते क्रमों की गणना करें

    इस ट्यूटोरियल में, हम बढ़ते क्रमों की संख्या ज्ञात करने के लिए एक प्रोग्राम पर चर्चा करेंगे। इसके लिए हमें 0 से 9 अंकों वाली एक सरणी प्रदान की जाएगी। हमारा कार्य सरणी में मौजूद सभी अनुक्रमों को इस तरह से गिनना है कि अगला तत्व पिछले तत्व से बड़ा हो। उदाहरण #include<bits/stdc++.h> using namespa

  1. सी ++ में एक स्ट्रिंग के सभी अनुक्रमों को प्रिंट करें

    इस समस्या में, हमें एक स्ट्रिंग दी जाती है और हमें स्ट्रिंग के सभी अनुक्रमों को प्रिंट करना होता है। उत्पन्न सबस्ट्रिंग स्ट्रिंग के तत्वों को हटाकर बनाया जाता है लेकिन क्रम वही रहता है (यानी ऑर्डर बदला नहीं जा सकता)। आइए विषय को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं - Input: xyz Output: x,y,

  1. सी ++ में एक क्रमबद्ध सरणी में पूर्ण विशिष्ट गणना?

    एक सरणी एक ही डेटा प्रकार के तत्वों का एक संग्रह है। एक क्रमबद्ध सरणी एक सरणी है जिसमें तत्वों को आरोही या अवरोही क्रम में संग्रहीत किया जाता है। विशिष्ट गणना उन तत्वों की संख्या है जो समान नहीं हैं। एब्सोल्यूट डिफरेंट काउंट तत्वों के निरपेक्ष मान की अलग गिनती है यानी बिना चिह्न वाले तत्व (अहस्ताक