输入: s = “cbaebabacd”, p = “abc”
输出: [0,6]
解释:
起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。
起始索引等于 6 的子串是 “bac”, 它是 “abc” 的异位词。
之前用dict对比,这儿记录两字符串的字符个数之差,若全为0则认为一致
class Solution:
def findAnagrams(self, s: str, p: str) -> List[int]:
if len(p) > len(s):
return []
l = 0
r = l + len(p) - 1
# 记录前一个字符
pre = []
# 初始化滑窗字符个数
s_dict = {}
diff_counts = {}
for i in range(len(p)):
c = p[i]
if c in diff_counts:
diff_counts[c] += 1
else:
diff_counts[c] = 1
c = s[i]
pre.append(c)
if c in diff_counts:
diff_counts[c] -= 1
else:
diff_counts[c] = -1
return_arr = []
diff = 0
for x in diff_counts.values():
diff += abs(x)
if diff == 0:
return_arr.append(l)
# 滑动
l += 1
r += 1
while r < len(s):
diff_counts[pre[0]] += 1
c = s[r]
if c in diff_counts:
diff_counts[c] -= 1
else:
diff_counts[c] = -1
pre = pre[1:] + [c]
diff = 0
for x in diff_counts.values():
diff += abs(x)
if diff == 0:
return_arr.append(l)
# print(l)
# print(diff_counts)
l += 1
r += 1
return return_arr
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...


