আমাদের একটি স্ট্রিং s আছে, আমাদের s-এর ডISTINCT সাবসিকোয়েন্সের সংখ্যা গণনা করতে হবে। যদি উত্তর অনেক বড় হয় তবে রেজাল্টকে 10^9 + 7 দিয়ে মডুলো করে রিটার্ন করুন।
উদাহরণস্বরূপ, ইনপুট s = "bab" হলে আউটপুট হবে 6 কারণ ৬টি ভিন্ন সিকোয়েন্স আছে: "a", "b", "ba", "ab", "bb", "abb"।
সমাধানের ধাপসমূহ
dp := s-এর আকারের অ্যারে ০ দিয়ে ফিল করেm := 10^9 + 7s-এর প্রতিটি ইন্ডেক্সiএবং আইটেমcharএর জন্য:ind := s-এi-তমchar-এর ডান পাশ থেকে ইন্ডেক্সযদি
ind == -1হয়, তবেdp[i] := 1 + sum(dp[:i]) % m, অন্যথায়dp[i] := sum(dp[ind:i]) % m
sum(dp) % mরিটার্ন করুন
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালোভাবে বুঝার জন্য:
def solve(s):
dp, m = [0] * len(s), 10**9 + 7
for i, char in enumerate(s):
ind = s.rfind(char, 0, i)
dp[i] = 1 + sum(dp[:i]) % m if ind == -1 else sum(dp[ind:i]) % m
return sum(dp) % m
s = "bab"
print(solve(s)) ইনপুট
"bab"
আউটপুট
6