leetcode每日一题—567.字符串的排列

461 篇文章 1 订阅

题目:
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。
在这里插入图片描述
思路:
滑动窗口求解
用字典dic1 统计s1中的元素组成。用字典dic2统计 与s1等长的s2子串 的元素组成。当dic1==dic2,即可返回True。

解答:

class Solution:
    def checkInclusion(self, s1: str, s2: str) -> bool:
        if s1 in s2:
            return True
        if len(s1)==1:
            return False
        l1,l2=len(s1),len(s2)
        dic1={}
        for c in s1:
            dic1[c]=dic1.get(c,0)+1
        left,right=0,l1
        dic2={}
        for c in s2[left:right]:
            dic2[c]=dic2.get(c,0)+1
        if dic1==dic2:
            return True   
        while right<l2:
            dic2[s2[left]]-=1
            if dic2[s2[left]]==0:
                del dic2[s2[left]]
            left+=1
            if s2[right] in dic2:
                dic2[s2[right]]+=1 
            else:
                dic2[s2[right]]=1
            right+=1
            if dic1==dic2:
                return True
        return False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值