मान लीजिए कि हमारे पास एक स्ट्रिंग s है, हमें s के गैर-रिक्त अद्वितीय अनुक्रमों की संख्या ज्ञात करनी है। यदि उत्तर बहुत बड़ा है तो परिणाम को 10^9 + 7 से संशोधित करें।
इसलिए, यदि इनपुट s ="xxy" जैसा है, तो आउटपुट 5 होगा, क्योंकि इसके बाद के पांच क्रम हैं:"x", "xx", "xy", "y" और "xxy"।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
मी :=10^9 + 7
-
n :=s का आकार
-
आकार 26 की एक सरणी तालिका परिभाषित करें
-
रेस :=0
-
इनिशियलाइज़ i :=1 के लिए, जब i <=n, अपडेट करें (i को 1 से बढ़ाएँ), do−
-
c :=s[i − 1] - 'a' का ASCII
-
curr :=(res + 1 - टेबल[c] + m) मॉड m
-
res :=(res + curr) mod m
-
टेबल [सी]:=(टेबल [सी] + करी) मॉड एम
-
-
रिटर्न रेस
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h>
using namespace std;
const int m = 1e9 + 7;
int solve(string s) {
int n = s.size();
vector<int> table(26);
long long res = 0;
for (int i = 1; i <= n; ++i) {
int c = s[i − 1] − 'a';
int curr = (res + 1 − table[c] + m) % m;
res = (res + curr) % m;
table[c] = (table[c] + curr) % m;
}
return res;
}
int main(){
string s = "xxy";
cout << solve(s);
} इनपुट
"xxy"
आउटपुट
5