ধরুন আমাদের একটি স্ট্রিং s আছে, আমাদের s-এর অ-খালি অনন্য অনুক্রমের সংখ্যা খুঁজে বের করতে হবে। যদি উত্তরটি খুব বড় হয় তবে ফলাফলটি 10^9 + 7 দ্বারা পরিবর্তন করুন।
সুতরাং, যদি ইনপুটটি s ="xxy" এর মতো হয়, তাহলে আউটপুট হবে 5, কারণ পাঁচটি অনুসৃতি রয়েছে:"x", "xx", "xy", "y" এবং "xxy"।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
m :=10^9 + 7
-
n :=s
এর আকার -
26 আকারের একটি অ্যারে টেবিল সংজ্ঞায়িত করুন
-
res :=0
-
আরম্ভ করার জন্য i :=1, যখন i <=n, আপডেট (i 1 দ্বারা বাড়ান), do−
-
c :=s[i − 1] − 'a'
এর ASCII -
curr :=(res + 1 − table[c] + m) mod m
-
res :=(res + curr) mod m
-
টেবিল[c] :=(টেবিল[c] + 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