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

C++ में विशिष्ट बाद के चरण II

मान लीजिए हमारे पास एक स्ट्रिंग एस है, हमें एस के अलग-अलग बाद की संख्या की गणना करनी है। परिणाम बड़ा हो सकता है, इसलिए हम उत्तर मॉड्यूल 10^9 + 7. वापस कर देंगे।

इसलिए, यदि इनपुट "बाब" जैसा है, तो आउटपुट 6 होगा, क्योंकि 6 अलग-अलग क्रम हैं, ये "ए", "बी, "बीए", "एबी", "बीबी", "एबीबी" हैं।

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

  • फ़ंक्शन ऐड () को परिभाषित करें, इसमें a, b,

    . लगेगा
  • वापसी ((एक मॉड एमओडी) + (बी मॉड एमओडी)) मॉड एमओडी

  • एक फ़ंक्शन उप () को परिभाषित करें, इसमें a, b,

    . लगेगा
  • वापसी (((एक मॉड एमओडी) - (बी मॉड एमओडी)) + एमओडी) मॉड एमओडी

  • फ़ंक्शन mul() को परिभाषित करें, इसमें a, b,

    . लगेगा
  • वापसी ((एक मॉड एमओडी) * (बी मॉड एमओडी)) मॉड एमओडी

  • मुख्य विधि से, तो निम्नलिखित -

  • n :=s का आकार

  • 26 के आकार की dp सरणी परिभाषित करें

  • रेस :=0

  • s :=s से पहले अंतरिक्ष को संयोजित करें

  • इनिशियलाइज़ i :=1 के लिए, जब i <=n, अपडेट करें (i को 1 से बढ़ाएँ), करें -

    • एक्स:=एस [i]

    • जोड़ा गया:=उप (जोड़ें (रेस, 1), डीपी [एक्स - 'ए'])

    • dp[x - 'a'] =add(dp[x - 'a'], जोड़ा गया)

    • रेस:=जोड़ें (रेस, जोड़ा गया)

  • रिटर्न रेस

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
const lli MOD = 1e9 + 7;
class Solution {
   public:
   lli add(lli a, lli b){
      return ( (a % MOD) + (b % MOD) ) % MOD;
   }
   lli sub(lli a, lli b){
      return ( ( (a % MOD) - (b % MOD) ) + MOD ) % MOD;
   }
   lli mul(lli a, lli b){
      return ( (a % MOD) * (b % MOD) ) % MOD;
   }
   int distinctSubseqII(string s) {
      int n = s.size();
      vector <lli> dp(26);
      int res = 0;
      s = " " + s;
      for(lli i = 1; i <= n; i++){
         char x = s[i];
         int added = sub(add(res, 1) , dp[x - 'a']);
         dp[x - 'a'] = add(dp[x - 'a'], added);
         res = add(res, added);
      }
      return res;
   }
};
main(){
   Solution ob;
   cout << (ob.distinctSubseqII("bab"));
}

इनपुट

"bab"

आउटपुट

6

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

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

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

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

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

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