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