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 语法 用来判断数组里的 每个元素 是否都满足一个条件

相关推荐
啦啦啦_99993 分钟前
1. 逻辑回归
算法·机器学习·逻辑回归
ZC跨境爬虫6 分钟前
跟着 MDN 学 HTML day_2:(表单分组与高级输入控件实战)
前端·javascript·css·ui·html
fengenrong41 分钟前
20260429
c++·算法
南宫萧幕43 分钟前
Python与Simulink联合仿真:基于DQN的HEV能量管理策略建模与全链路排雷实战
开发语言·人工智能·python·算法·机器学习·matlab·控制
千寻girling1 小时前
滑动窗口刷了快一个月(26天)了 , 还没有刷完. | 含(操作系统学什么的Java 后端)
java·开发语言·javascript·c++·人工智能·后端·python
一袋米扛几楼981 小时前
【报错问题】彻底解决 TypeScript 报错 TS2769: No overload matches this call (JWT 篇)
linux·javascript·typescript
apollowing1 小时前
启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶(优)
算法·启发式算法·web app
牧码岛2 小时前
Web前端之JavaScrip中的Array、Object、Map和Set详解
前端·javascript·web·web前端
Chat_zhanggong3452 小时前
主推NT98336BG作用有哪些?
嵌入式硬件·算法
533_2 小时前
[pinia] vue3中监听pinia值的变化
前端·javascript·vue.js