1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// @Title: 找到字符串中所有字母异位词 (Find All Anagrams in a String)
// @Author: 15816537946@163.com
// @Date: 2022-03-23 11:49:06
// @Runtime: 4 ms
// @Memory: 4.9 MB
func findAnagrams(s string, p string) []int {
    n, m := len(s), len(p)
    if m >n {
        return nil
    }

    cnt := [26]int{}
    for i := range p {
        cnt[p[i]-'a']--
    }

    ret := make([]int,0)
    var lo int
    for hi := range s {
        x := s[hi]-'a'
        cnt[x]++
        for cnt[x] > 0 {
            cnt[s[lo]-'a']--
            lo++
        }

        if hi-lo+1 == m {
            ret = append(ret, lo)
            cnt[s[lo]-'a']--
            lo++
        }
    }

    return ret
}