মনে করুন একটি স্ট্রিং S আছে, আমাদের দৈর্ঘ্য K-এর সাবস্ট্রিংগুলো খুঁজে বের করতে হবে যেখানে কোনো ক্যারেক্টার রিপিট হয় না। যেমন S = "heyfriendshowareyou" এবং K = 5 হলে আউটপুট হবে ১৫, কারণ স্ট্রিংগুলো হল [heyfr, eyfri, yfrie, frien, riend, iends, endsh, ndsho, dshow, showa, howar, oware, warey, areyo, reyou]
এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব:
- একটি খালি ম্যাপ m, left := 0, right := -1 এবং ans := 0 তৈরি করুন
- যখন right < স্ট্রিং দৈর্ঘ্য - 1
- যদি right - left + 1 = k, তবে
- ans ১ বাড়ান
- m[str[left]] ১ কমান
- left ১ বাড়ান
- পরবর্তী ইটারেশনে যান
- যদি str[right + 1] m-এ না থাকে, তবে
- m[str[right + 1]] := 1 সেট করুন
- right ১ বাড়ান
- অন্যथा যদি m[str[right + 1]] 0 হয়, তবে
- m[str[right + 1]] ১ বাড়ান
- right ১ বাড়ান
- অন্যথায়
- m[str[left]] ১ কমান
- left := left + 1
- যদি right - left + 1 = k, তবে
- যদি right - left + 1 = k, তবে ans ১ বাড়ান
- ans রিটার্ন করুন
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালো বুঝতে:
class Solution(object):
def numKLenSubstrNoRepeats(self, S, K):
m = {}
left = 0
right = -1
ans = 0
while right < len(S) - 1:
if right - left + 1 == K:
ans += 1
m[S[left]] -= 1
left += 1
continue
if S[right + 1] not in m:
m[S[right + 1]] = 1
right += 1
elif not m[S[right + 1]]:
m[S[right + 1]] += 1
right += 1
else:
m[S[left]] -= 1
left += 1
if right - left + 1 == K:
ans += 1
return ans
ob1 = Solution()
print(ob1.numKLenSubstrNoRepeats("heyfriendshowareyou", 5))
ইনপুট
"heyfriendshowareyou" 5
আউটপুট
15