润到滑动窗口专题。
滑动窗口+字典
思路:使用s1长度相同的滑动窗口在s2中滑动,每次都判断每个字符的个数是否相同
class Solution:
def checkInclusion(self, s1: str, s2: str) -> bool:
#s1长度和s2长度相同
#每个字符的个数完全相同
#思路:使用s1长度相同的滑动窗口在s2中滑动,每次都判断每个字符的个数是否相同
#是s1中字符出现的次数
counter1=collections.Counter(s1)
num2=len(s2)
#滑动窗口为[left,right]
left=0
right=len(s1)-1
#统计s2,不包括right
counter2=collections.Counter(s2[0:right])
while right<num2:
#加入right
counter2[s2[right]]+=1
#次数一样就返回true
if counter1==counter2:
return True
#下一次移动前,左边清空
counter2[s2[left]]-=1
#如果左边left次数为0则需要删掉
if counter2[s2[left]]==0:
del counter2[s2[left]]
#滑动窗口向右移动
left+=1
right+=1
return False
ps:
counter1=collections.Counter(s1)
collections.Counter(s1)会统计字符串s1中每个字符出现的次数,并返回一个字典,其中键是字符,值是该字符在字符串中出现的次数。通过打印这个字典,我们可以看到s1中每个字符出现的次数。
这个总结也不错
后续会总结学到---------------