【字符串的排列】python刷题记录

润到滑动窗口专题。

滑动窗口+字典

思路:使用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中每个字符出现的次数。

 

这个总结也不错

后续会总结学到---------------

变长滑动窗口----字符串

变长滑动窗口----数组

固定滑动窗口

. - 力扣(LeetCode)

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值