在Python中查找没有重复字符的K长度子字符串
假设我们有一个字符串S,我们必须找到长度为K的子字符串的数目,其中不重复任何字符。因此,如果S=“heyfriendshowareyou”且K为5,则输出将为15,因为字符串为[heyfr,eyfri,yfrie,frien,riend,iends,endsh,ndsho,dshow,showa,howar,oware,warey,areyo,你
为了解决这个问题,我们将遵循以下步骤-
创建一个空的映射m,然后左:=0,右:=-1和ans:=0
而右<字符串的长度–1
将m[str[left]]减少1
左:=左+1
将m[str[right+1]]增加1
向右增加1
设置m[str[right+1]]:=1
向右增加1
将ans增加1
将m[str[left]]减少1
向左增加1
继续下一次迭代
如果右–左+1=k,则
如果str[right+1]不在m中,则
否则,如果m[str[right+1]]为0,则
其他
如果右–左+1=k,则将ans加1
返回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
输出结果
"AIIOC"