问题描述
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。
换句话说,第一个字符串的排列之一是第二个字符串的子串。
示例 1:
输入: s1 = “ab” s2 = “eidbaooo”
输出: True
解释: s2 包含 s1 的排列之一 (“ba”).
示例2:输入: s1= “ab” s2 = “eidboaoo”
输出: False
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutation-in-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路分析及代码实现
这道题使用滑动窗口做的,巧妙地利用了内置库collections中的counter方法,先统计s1中的字母个数,然后统计窗口的字母个数,如果不相等就将窗口向右滑动
import collections
class Solution:
def checkInclusion(self, s1: str, s2: str) -> bool:
n = len(s1)
counter1 = collections.Counter(s1)
left = 0
right = n-1
while right < len(s2):
window = s2[left:right+1]
counter2 = collections.Counter(window)
if counter1 == counter2:
return True
else:
left += 1
right += 1
return False