var minWindow = function(s, t) {
const sLen = s.length
const window = {}
const need = {}
for(let key of t) {
window[key] = 0
need[key] = need[key]? (need[key]+1): 1
}
let valide = 0
let left = 0, right = 0
let start = 0, len = s.length +1
while (right < sLen) {
let c = s[right]
right++
if (need[c]) {
window[c]++
if (window[c] === need[c]) {
valide++
}
}
while(valide === Object.keys(need).length) {
if (right - left < len) {
start = left
len = right -left
}
let d = s[left]
left++
if (need[d]) {
if (window[d] === need[d]) {
valide--
}
window[d]--
}
}
}
return len === s.length +1 ? '' : s.substr(start, len)
};
var findAnagrams = function(s, p) {
let slen = s.length
const window = {}
const need = {}
const result = []
for (let key of p) {
window[key] = 0
need[key] = need[key] ? need[key] + 1 : 1
}
let left = 0, right = 0
let start = 0, len = slen + 1
let validate = 0
while (right < slen) {
const b = s[right]
right++
if (need[b]) {
window[b] ++
if (window[b] === need[b]) {
validate ++
}
}
while(right - left >= p.length) {
if (validate === Object.keys(need).length) {
result.push(left)
}
const c = s[left]
left ++
if (need[c]) {
if (need[c] === window[c]) {
validate--
}
window[c]--
}
}
}
return result
};