-
Notifications
You must be signed in to change notification settings - Fork 2
/
438.找到字符串中所有字母异位词.go
81 lines (79 loc) · 1.65 KB
/
438.找到字符串中所有字母异位词.go
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/*
* @lc app=leetcode.cn id=438 lang=golang
*
* [438] 找到字符串中所有字母异位词
*
* https://leetcode.cn/problems/find-all-anagrams-in-a-string/description/
*
* algorithms
* Medium (54.69%)
* Likes: 962
* Dislikes: 0
* Total Accepted: 213.9K
* Total Submissions: 390.9K
* Testcase Example: '"cbaebabacd"\n"abc"'
*
* 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
*
* 异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。
*
*
*
* 示例 1:
*
*
* 输入: s = "cbaebabacd", p = "abc"
* 输出: [0,6]
* 解释:
* 起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。
* 起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。
*
*
* 示例 2:
*
*
* 输入: s = "abab", p = "ab"
* 输出: [0,1,2]
* 解释:
* 起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。
* 起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。
* 起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。
*
*
*
*
* 提示:
*
*
* 1 <= s.length, p.length <= 3 * 10^4
* s 和 p 仅包含小写字母
*
*
*/
package jzoffer
// @lc code=start
func findAnagrams(s string, p string) []int {
var res []int
n, m := len(s), len(p)
if n < m {
return res
}
var cnt [26]int
for i := 0; i < m && i < n; i++ {
cnt[p[i]-'a']--
}
left := 0
for right, v := range s {
ch := v - 'a'
cnt[ch]++
for cnt[ch] > 0 {
cnt[s[left]-'a']--
left++
}
if right-left+1 == m {
res = append(res, left)
}
}
return res
}
// @lc code=end