https://leetcode.cn/problems/find-all-anagrams-in-a-string/description/?envType=study-plan-v2&envId=top-100-liked
解题思路:
1. 使用滑动窗口,定义两个指针,分别指向窗口的最左边和最右边
2. 使用一个计数数组记录窗口内各字符的出现次数
3. 循环条件:右指针小于字符串长度
4. 更新窗口内各字符出现的情况
5. 如果窗口内各字符出现情况和目标出现情况一致,则添加到结果集
6. 移动窗口,更新计数数组
7. 返回结果集
func findAnagrams(s string, p string) []int {
if len(s) < len(p) {
return []int{}
}
l, r := 0, 0
count, target := [26]int{}, [26]int{} // 计数数组和目标数组
res := make([]int, 0)
for i := 0; i < len(p); i++ {
count[s[i]-'a']++
target[p[i]-'a']++
r++
}
for r < len(s) {
// 判断计数数组和目标数组是否一致
if count == target {
res = append(res, l)
}
// 移动窗口,更新计数数组
count[s[l]-'a']--
l++
count[s[r]-'a']++
r++
}
if count == target {
res = append(res, l)
}
return res
}

被折叠的 条评论
为什么被折叠?



