Files
leetcode/top-100-liked/9_test.go
T
2026-05-31 05:06:57 +10:00

52 lines
932 B
Go

package top100liked
import (
"fmt"
"testing"
)
// https://leetcode.cn/problems/find-all-anagrams-in-a-string/description/?envType=study-plan-v2&envId=top-100-liked
func findAnagrams(s string, p string) []int {
result := []int{}
if len(s) < len(p) {
return result
}
// p 的字符计数
pCount := [26]int{}
for i := 0; i < len(p); i++ {
pCount[p[i]-'a']++
}
// 窗口计数
wCount := [26]int{}
// 先初始化第一个窗口 [0, len(p)-1]
for i := 0; i < len(p); i++ {
wCount[s[i]-'a']++
}
// 比较第一个窗口
if wCount == pCount {
result = append(result, 0)
}
// 滑动窗口
for i := len(p); i < len(s); i++ {
// 加入新字符
wCount[s[i]-'a']++
// 移除左边界字符
wCount[s[i-len(p)]-'a']--
// 比较
if wCount == pCount {
result = append(result, i-len(p)+1)
}
}
return result
}
func TestS9(t *testing.T) {
fmt.Printf("%+v", findAnagrams("cbaebabacd", "abc"))
}