给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。
换句话说,第一个字符串的排列之一是第二个字符串的子串。
class Solution(object):
def checkInclusion(self, s1, s2):
counter1 = collections.Counter(s1) # 统计 s1 中每个字符出现的次数
N = len(s2)
left = 0
right = len(s1) - 1
counter2 = collections.Counter(s2[0:right]) # 统计窗口s2[left, right - 1]内的元素出现的次数
while right < N:
counter2[s2[right]] += 1
if counter1 == counter2: # 如果滑动窗口内各个元素出现的次数跟 s1 的元素出现次数完全一致,返回 True
return True
counter2[s2[left]] -= 1
if counter2[s2[left]] == 0:
del counter2[s2[left]]
left += 1
right += 1
return False