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

相关推荐
菜菜小狗的学习笔记8 小时前
剑指Offer算法题(四)链表
数据结构·算法·链表
myloveasuka8 小时前
[Java]查找算法&排序算法
java·算法·排序算法
清水白石0088 小时前
Free-Threaded Python 实战指南:机遇、风险与 PoC 验证方案
java·python·算法
We་ct8 小时前
LeetCode 148. 排序链表:归并排序详解
前端·数据结构·算法·leetcode·链表·typescript·排序算法
TON_G-T9 小时前
day.js和 Moment.js
开发语言·javascript·ecmascript
Irene19919 小时前
JavaScript 中 this 指向总结和箭头函数的作用域说明(附:call / apply / bind 对比总结)
javascript·this·箭头函数
2501_921930839 小时前
ReactNative项目OpenHarmony三方库集成实战:react-native-appearance(更推荐自带的Appearance)
javascript·react native·react.js
还是大剑师兰特9 小时前
Vue3 中 computed(计算属性)完整使用指南
前端·javascript·vue.js
本喵是FW9 小时前
C语言手记1
java·c语言·算法
咱就是说不配啊9 小时前
3.19打卡day33
数据结构·c++·算法