438.find-all-anagrams-in-a-string.go 430 B

123456789101112131415161718192021222324
  1. func findAnagrams(s string, p string) (res []int) {
  2. freq, curr := make([]int, 256), make([]int, 256)
  3. for _, r := range p {
  4. freq[r]++
  5. }
  6. m, n := len(s), len(p)
  7. ss := []rune(s)
  8. for i := 0; i < m; i++ {
  9. curr[ss[i]]++
  10. if n-1 <= i {
  11. same := true
  12. for j := 'a'; j <= 'z'; j++ {
  13. if freq[j] != curr[j] {
  14. same = false
  15. }
  16. }
  17. if same {
  18. res = append(res, i-n+1)
  19. }
  20. curr[ss[i-n+1]]--
  21. }
  22. }
  23. return
  24. }