跳到主要内容

438.找到字符串中所有字母异位词

链接:438.找到字符串中所有字母异位词
难度:Medium
标签:哈希表、字符串、滑动窗口
简介:给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

题解 1 - typescript

  • 编辑时间:2021-11-28
  • 执行用时:140ms
  • 内存消耗:44.9MB
  • 编程语言:typescript
  • 解法介绍:遍历后存储数组,滑动窗口比较。
function findAnagrams(s: string, p: string): number[] {
const sn = s.length;
const pn = p.length;
if (sn < pn) return [];
const arr: number[] = new Array(26).fill(0);
for (let i = 0; i < pn; i++) arr[p.codePointAt(i)! - 97]++;
const str = arr.join('#');
arr.fill(0);
const ans: number[] = [];
let l = 0;
let r = 0;
while (r < pn) arr[s.codePointAt(r++)! - 97]++;
while (r < sn) {
if (str === arr.join('#')) ans.push(l);
arr[s.codePointAt(l++)! - 97]--;
arr[s.codePointAt(r++)! - 97]++;
}
if (str === arr.join('#')) ans.push(l);
return ans;
}