ধরুন আমাদের কাছে "abcdefghijklmnopqrstuvwxyz" এর অসীম মোড়কের স্ট্রিং s আছে, তাহলে s এর মান এইরকম হবে − "...zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvcdwxyz"... পি>
এখন আমরা আরেকটি স্ট্রিং পি আছে. আমাদের কাজ হল p-এর কতগুলি অনন্য নন-খালি সাবস্ট্রিং s-এ উপস্থিত রয়েছে তা খুঁজে বের করা। বিশেষ করে, আমাদের ইনপুট হল p স্ট্রিং এবং আমাদের স্ট্রিং s-এ p এর বিভিন্ন অ-খালি সাবস্ট্রিংগুলির সংখ্যা আউটপুট করতে হবে।
সুতরাং ইনপুট যদি “zab” এর মত হয় তাহলে আউটপুট হবে 6। স্ট্রিং “z”, “a”, “b”, “za”, “ab”, “zab” এর মধ্যে 6 টি সাবস্ট্রিং আছে। স্ট্রিং s
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
26 আকারের একটি অ্যারে ডিপি তৈরি করুন, x :=0
সেট করুন -
আমি 0 থেকে p
এর পরিসরে-
যদি i> 0 এবং (p[i] – p[i – 1] হয় 1 বা p[i – 1] – p[i] হয় 25), তাহলে x বাড়ান 1, অন্যথায় x :=1
-
dp[p[i] – ASCII of 'a'] :=সর্বাধিক (x, dp[p[i] - 'a'] এর ASCII)
-
-
ret :=0
-
আমি 0 থেকে 25 রেঞ্জের জন্য
-
ret :=ret + dp[i]
-
-
রিটার্ন রিটার্ন
উদাহরণ (C++)
আসুন আরও ভালোভাবে বোঝার জন্য নিচের বাস্তবায়ন দেখি −
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int findSubstringInWraproundString(string p) {
vector <int> dp(26);
int x = 0;
for(int i = 0; i < p.size(); i++){
if(i > 0 && (p[i] - p[i - 1] == 1 || p[i - 1] - p[i] == 25)){
x++;
}
else x = 1;
dp[p[i] - 'a'] = max(x, dp[p[i] - 'a']);
}
int ret = 0;
for(int i = 0; i < 26; i++){
ret += dp[i];
}
return ret;
}
};
main(){
Solution ob;
cout << (ob.findSubstringInWraproundString("zab"));
} ইনপুট
"zab"
আউটপুট
6