Const
function findAnagrams(s: string, p: string): number[] {
const ans: number[] = [];
const hash = new Array(26).fill(0);
const k = p.length;
const code = (c: string) => c.charCodeAt(0) - 'a'.charCodeAt(0);
// 统计p中每个字符的需求
for (const c of p) {
hash[code(c)]--;
}
for (let l = 0, r = 0; r < s.length; ++r) {
// 入
hash[code(s[r])]++;
// 出
if (r - l + 1 > k) {
hash[code(s[l])]--;
l++;
}
// 记
if (r - l + 1 === k) {
if (hash.every(x => x === 0)) {
ans.push(l);
}
}
}
return ans;
}
438.找到字符串中所有字母异位词
给定两个字符串
s
和p
,找到s
中所有p
的 字母异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。字母异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。
示例 1:
输入:
s = "cbaebabacd", p = "abc"
输出:
[0,6]
解释:
"cba"
, 它是"abc"
的字母异位词。"bac"
, 它是"abc"
的字母异位词。示例 2:
输入:
s = "abab", p = "ab"
输出:
[0,1,2]
解释:
"ab"
, 它是"ab"
的字母异位词。"ba"
, 它是"ab"
的字母异位词。"ab"
, 它是"ab"
的字母异位词。提示:
1 <= s.length, p.length <= 3 * 10^4
s
和p
仅包含小写字母