【hot100篇-python刷题记录】【找到字符串中所有字母异位词】
R6-滑动窗口篇
印象题
核心:
使用collections方法的Counter计数,统计了某个子串中每个字母出现的次数。
判断子串相等:counter1=counter2
(注意:此时,counter1或者counter2都不能含有多余的项(尽管可能为0))
思路:
先统计一遍p的counter1
接着开始滑动窗口,每次从右边增加一个字符。因此初始滑动窗口大小为len(p)-1,当从右边增加一个元素,判断counter1是否等于counter2
相等:append(left)
下一次预备:
如果counter2中left对应的字符数量为0,需要删除,避免影响下一次的判断
left和right指针都向右移动
class Solution:def findAnagrams(self, s: str, p: str) -> List[int]:counter1=collections.Counter(p)left,right=0,len(p)-1counter2=collections.Counter(s[0:right])ret=[]while right<len(s):counter2[s[right]]+=1if counter1==counter2:ret.append(left)counter2[s[left]]-=1if counter2[s[left]]==0:del counter2[s[left]]right+=1left+=1return ret