ধরুন আমরা একটি স্ট্রিং দিয়েছি যা শুধুমাত্র a, b এবং c অক্ষর নিয়ে গঠিত। আমাদের এই সমস্ত অক্ষর a, b এবং c এর কমপক্ষে একটি উপস্থিতি ধারণকারী সাবস্ট্রিংগুলির সংখ্যা ফেরত দিতে হবে। উদাহরণস্বরূপ, যদি স্ট্রিংটি "abcabc" হয়, তাহলে আউটপুট হবে 10, কারণ সাবস্ট্রিংটিতে a, b এবং c অক্ষরের অন্তত একটি উপস্থিতি রয়েছে, এইগুলি হল "abc", "abca", "abcab", “abcabc”, “bca”, “bcab”, “cab”, “cabc” এবং “abc” (আবার শেষ অংশের জন্য)।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
ret :=0, m নামে একটি মানচিত্র তৈরি করুন, j :=0
সেট করুন -
i এর জন্য 0 থেকে s আকারের সীমার মধ্যে
-
m
ম্যাপে s[i] এর সংখ্যা বাড়ান -
যখন m[‘a’]> 0 এবং m[‘b’]> 0 এবং m[‘c’]> 0,
-
m
মানচিত্রে s[i] এর গণনা হ্রাস করুন -
1 দ্বারা j বাড়ান
-
-
j দ্বারা ret বাড়ান
-
-
রিটার্ন রিটার্ন
উদাহরণ (C++)
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int numberOfSubstrings(string s) {
int ret = 0;
map <char, int> m;
int j = 0;
for(int i = 0; i < s.size(); i++){
m[s[i]]++;
while(m['a'] > 0 && m['b'] > 0 && m['c'] > 0){
m[s[j]]--;
j++;
}
ret += j;
}
return ret;
}
};
main(){
Solution ob;
cout << (ob.numberOfSubstrings("abcabc"));
} ইনপুট
"abcabc"
আউটপুট
10