题目:
给定两个字符串 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