ধরুন আমাদের একটি স্ট্রিং S আছে, আমাদের K দৈর্ঘ্যের সাবস্ট্রিংগুলির সংখ্যা খুঁজে বের করতে হবে যেখানে কোনও অক্ষর পুনরাবৃত্তি হয় না। সুতরাং যদি S =“heyfriendshowareyou” এবং K হয় 5, তাহলে আউটপুট হবে 15, যেমন স্ট্রিংগুলি হল [heyfr, eyfri, yfrie, frien, riend, iends, endsh, ndsho, dshow, showa, Howar, oware, warey, areyo , reyou]
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি খালি মানচিত্র m, এবং বামে তৈরি করুন :=0 এবং ডানে :=-1 এবং উত্তর :=0
- যখন ডানে <স্ট্রিংয়ের দৈর্ঘ্য – 1
- যদি ডান - বাম + 1 =k, তারপর
- উত্তর 1 দ্বারা বৃদ্ধি করুন
- m[str[left]] 1 কমিয়ে দিন
- বামে 1 বাড়ান
- পরবর্তী পুনরাবৃত্তি চালিয়ে যান
- যদি str[right + 1] m এ না থাকে, তাহলে
- সেট m[str[right + 1]] :=1
- 1 দ্বারা ডান বাড়ান
- অন্যথায় যদি m[str[right + 1]] 0 হয়, তাহলে
- m[str[right + 1]] 1 দ্বারা বাড়ান
- 1 দ্বারা ডান বাড়ান
- অন্যথায়
- m[str[left]] 1 কমিয়ে দিন
- বাম :=বাম + 1
- যদি ডান - বাম + 1 =k, তারপর
- যদি ডান - বাম + 1 =k, তাহলে উত্তর 1 দ্বারা বাড়ান
- উত্তর ফেরত দিন
উদাহরণ
আসুন আরও ভালোভাবে বোঝার জন্য নিচের বাস্তবায়ন দেখি −
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
আউটপুট
"AIIOC"