题目:
给定两个字符串 s 和 p,找到 s ****中所有 p ****的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。
算法:
方法一:双指针
双指针关键在于如何移动,在何时移动指针
func findAnagrams(s string, p string) []int {
pCount := make([]int, 26)
for i := range p {
pCount[int(p[i] - 'a')] ++
}
// 检查curCharCount中各个字符的个数与count中的相同
var check func(curCharCount []int) bool
check = func(curCharCount []int) bool {
for i := range curCharCount {
if curCharCount[i] != pCount[i] {
return false
}
}
return true
}
ans := make([]int, 0)
count := make([]int, 26)
for left, right := 0, 0; right < len(s); right ++ {
count[int(s[right] - 'a')] ++
if right - left + 1 < len(p) {
continue
}
if check(count) {
ans = append(ans, left)
}
count[int(s[left] - 'a')] --
left ++
}
return ans
}