মনে করুন একটি স্ট্রিং `s` আছে, আমাদের যেকোনো সাবস্ট্রিং-এর সর্বোচ্চ ঘটনার সংখ্যা বের করতে হবে যা নিচের নিয়মগুলো পূরণ করে -
- সাবস্ট্রিং-এ ভিন্ন ক্যারেক্টারের সংখ্যা `maxLetters`-এর চেয়ে কম বা সমান হতে হবে।
- সাবস্ট্রিং-এর আকার `minSize` এবং `maxSize`-এর মধ্যে (ইনক্লুসিভ) থাকতে হবে।
যদি ইনপুট হয় - "aababcaab", `maxLetters = 2`, `minSize = 3` এবং `maxSize = 4`, তবে আউটপুট হবে ২। সাবস্ট্রিং "aab"-এর মূল স্ট্রিং-এ ২টি ঘটনা আছে। এটি শর্তগুলো পূরণ করে, ২টি यুনিক অক্ষর এবং আকার ৩ (`minSize` এবং `maxSize`-এর মধ্যে)।
এটি সমাধান করতে আমরা নিচের ধাপগুলো অনুসরণ করব -
- একটি ম্যাপ `m` সংজ্ঞায়িত করুন
- `sz` = `minSize` থেকে `maxSize` পর্যন্ত
- একটি ম্যাপ `x` তৈরি করুন, একটি `temp` তৈরি করুন, প্রাথমিকভাবে খালি
- `i` = 0 থেকে `sz-1` পর্যন্ত
- `x[s[i]]`-কে ১ বাড়ান
- `temp := temp + s[i]`
- `j` = 0, `i` = `sz` থেকে `s`-এর আকার - 1 পর্যন্ত, `i` এবং `j` বাড়ান
- যদি `x`-এর আকার `<= maxLetters`, তবে `m[temp]`-কে ১ বাড়ান
- `x[temp[0]]`-কে ১ কমান
- যদি `x[temp[0]]` 0 হয়, তবে `temp[0]`-কে `x`- থেকে ডিলিট করুন
- `temp`-এর প্রথম এবং দ্বিতীয় এলিমেন্ট ডিলিট করুন
- `x[s[i]]`-কে ১ বাড়ান
- `temp := temp + s[i]`
- যদি `x`-এর আকার `<= maxLetters`, তবে `m[temp]`-কে ১ বাড়ান
- `ans := 0`
- যদি ম্যাপ `m`-এ কিছু এলিমেন্ট থাকে, তবে
- `ans := max(ans, i`-তম কি-ভ্যালু পেয়ার-এর ভ্যালু)
- `ans` রিটার্ন করুন
উদাহরণ (C++)
বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন -
#include <bits/stdc++.h> using namespace std; class Solution { public: int maxFreq(string s, int maxLetters, int minSize, int maxSize) { unordered_map <string ,int > m; for(int sz = minSize; sz <= minSize; sz++){ unordered_map <char, int> x; string temp =""; for(int i = 0; i < sz; i++){ x[s[i]]++; temp += s[i]; } for(int j = 0, i = sz; i < s.size(); i++, j++){ if(x.size() <= maxLetters){ m[temp]++; } x[temp[0]]--; if(x[temp[0]] == 0)x.erase(temp[0]); temp.erase(temp.begin(),temp.begin() + 1); x[s[i]]++; temp += s[i]; } if(x.size() <= maxLetters){ m[temp]++; } } int ans = 0; unordered_map <string ,int > :: iterator i = m.begin(); while(i != m.end()){ ans = max (ans, i->second); i++; } return ans; } }; main(){ Solution ob; cout << (ob.maxFreq("aababcaab",2,3,4)); }ইনপুট
"aababcaab" 2 3 4
আউটপুট
2