438. Find All Anagrams in a String

25 年 10 月 10 日 星期五
134 字
1 分钟

438. Find All Anagrams in a String

Screenshot 2025-10-10 at 9.03.49 am

思路:定长滑窗,写代码的时候,记得枚举右端点,写出左端点。

js
/**
 * @param {string} s
 * @param {string} p
 * @return {number[]}
 */
var findAnagrams = function (s, p) {
  const cntS = new Array(26).fill(0)
  const cntP = new Array(26).fill(0)
  const ans = []
  const n = s.length
  for (const c of p) {
    cntP[c.charCodeAt() - 'a'.charCodeAt()]++
  }
  for (let right = 0; right < n; right++) {
    // 明确写出左端点,不容易出错
    const left = right - p.length + 1
    cntS[s[right].charCodeAt() - 'a'.charCodeAt()]++
    if (left < 0) {
      continue
    }
    if (_.isEqual(cntS, cntP)) {
      ans.push(left)
    }
    cntS[s[left].charCodeAt() - 'a'.charCodeAt()]--
  }
  return ans
}

文章标题:438. Find All Anagrams in a String

文章作者:Sirui Chen

文章链接:https://blog.siruichen.me/posts/438_find_all_anagrams_in_a_string[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。