**The Problem:**

Given a string **s** and a **non-empty** string **p**, find all the start indices of **p**‘s anagrams in **s**.

Strings consists of lowercase English letters only and the length of both strings **s** and **p** will not be larger than 20,100.

The order of output does not matter.

**Example 1:**

Input:s: "cbaebabacd" p: "abc"Output:[0, 6]Explanation:The substring with start index = 0 is "cba", which is an anagram of "abc". The substring with start index = 6 is "bac", which is an anagram of "abc".

**Example 2:**

Input:s: "abab" p: "ab"Output:[0, 1, 2]Explanation:The substring with start index = 0 is "ab", which is an anagram of "ab". The substring with start index = 1 is "ba", which is an anagram of "ab". The substring with start index = 2 is "ab", which is an anagram of "ab".

**The Solution:**

var findAnagrams = function(s, p) { let set = new Map() for(let i = 0; i < p.length; i++){ if(!set.has(p[i])){ set.set(p[i],1) } else{ set.set(p[i],set.get(p[i]) + 1) } } // console.log(set) let ans = [] let left = 0, right = 0, count = set.size while (right < s.length){ if(set.has(s[right])){ set.set(s[right],set.get(s[right]) - 1) if(set.get(s[right])== 0){ count-- } } while(count == 0){ if(set.has(s[left])){ set.set(s[left],set.get(s[left]) + 1) if(set.get(s[left]) > 0){ count++ } } if(right - left +1 == p.length){ ans.push(left) } left++ } right++ } return ans };