Leetcode 438. 找到字符串中所有字母异位词 JavaScript (Day 4)

javascript 复制代码
var findAnagrams = function (s, p) {
    let ans = [];
    let idx = new Map();
    for (let x of p)
        idx.set(x, (idx.get(x) ?? 0) + 1);
    let left = 0, right = 0;
    while (right < p.length) {
        if (idx.has(s[right])) {
            idx.set(s[right], idx.get(s[right]) - 1);
        }
        right++
    }
    while (right <= s.length) {
        if ([...idx.values()].every(x => x === 0)) ans.push(left);
        if (idx.has(s[right])) {
            idx.set(s[right], idx.get(s[right]) - 1);

        }
        if (idx.has(s[left])) {
            idx.set(s[left], idx.get(s[left]) + 1);

        }
        right++;
        left++;
    }
     return ans;
}

核心思想:滑动窗口
左指针移动 ,map中+1;
右指针移动 ,map中-1;
算法注意点:循环的结束条件是right <= s.length 一定要加等于,不然会漏掉最后一组数
语法注意点: every 语法 用来判断数组里的 每个元素 是否都满足一个条件

相关推荐
breeze jiang8 小时前
Next.js App Router 父子组件 RSC 拆分实战:从 Redis Hash 到客户端交互的最小化边界
javascript·redis·哈希算法
丫头,冲鸭!!!8 小时前
记账网站-post功能
javascript·个人开发
鬼手点金8 小时前
Scrapy + Playwright 完整示例(JS 动态渲染网页)
开发语言·javascript·爬虫·python·scrapy·html·json
逆境不可逃8 小时前
【LeetCode 912】排序数组——随机化快速排序详解
数据结构·算法·排序算法
Coder-magician8 小时前
《代码随想录》刷题打卡day31:动态规划-背包问题part02
算法·动态规划
薛定e的猫咪8 小时前
从因果视角解决多智能体协作:细读 SCIC 算法
算法
Forever Nore8 小时前
LeetCode 14 最长公共前缀 - 纵向扫描
linux·服务器·leetcode
c238568 小时前
《算法武林谱:四大排序神功与二分寻宝术全解》
数据结构·算法·排序算法
圣保罗的大教堂9 小时前
leetcode 3090. 每个字符最多出现两次的最长子字符串 简单
leetcode
一米阳光86619 小时前
软考(中级)软件设计师核心笔记(9)算法——时间复杂度与空间复杂度、查找算法、排序算法
笔记·算法·职场发展·软考·软件设计师·中级职称