题目
这道题和hash分组中异位词分组感觉很像,唯一的区别就是我们要找到所有满足p的异位词在s中的起始下标。
思想很简单,直接看代码就好了,关键步骤给出了注释:
class Solution:
def findAnagrams(self, s: str, p: str) -> List[int]:
if len(p) > len(s):
return []
target_encode = [0] * 26
window_encode = [0] * 26
res = []
left = len(p) - 1
for i in range(len(p)):
#初始化窗口数据并对window和target编码
target_encode[ord(p[i]) - ord('a')] += 1
window_encode[ord(s[i]) - ord('a')] += 1
#如果第一个窗口满足,则加入结果
if window_encode == target_encode:
res.append(0)
#判断后续窗口
for i in range(len(p),len(s)):
window_encode[ord(s[i - len(p)]) - ord('a')] -= 1
window_encode[ord(s[i]) - ord('a')] += 1
if window_encode == target_encode:
res.append(i-len(p)+1)
return res