给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
python
class Solution(object):
def findAnagrams(self, s, p):
#存放数组
res=[]
len_s=len(s)#s字符串长度
len_p=len(p)#p字符串长度
if len_s<len_p:
return []
count_p=[0]*26
count_s=[0]*26
for i in range(len_p):
count_p[ord(p[i])-ord('a')]+=1
count_s[ord(s[i])-ord('a')]+=1
#第一个滑动窗口匹配
if count_s == count_p:
res.append(0)
#移动滑动窗口,判断是否匹配成功
for i in range(1,len_s-len_p+1):
#移除左边字符
left_char=s[i-1]
count_s[ord(left_char)-ord('a')]-=1
#添加右边字符
right_char=s[i+len_p-1]
count_s[ord(right_char)-ord('a')]+=1
if count_p==count_s:
res.append(i)
return res
需要采用滑动串口,左边移除一个字符,右边添加一个字符,又因为他不要求字符顺序,所以可以采用每个字符的出现次数来判断是否匹配上。