/*
* @lc app=leetcode.cn id=76 lang=javascript
*
* [76] 最小覆盖子串
*/
// @lc code=start
/**
* @param {string} s
* @param {string} t
* @return {string}
*/
var minWindow = function (s, t) {
let ans = ''
let left = 0;
let winMap = new Map()
let targetMap = new Map()
for (let i = 0; i < t.length; i++) {
targetMap.set(t[i], (targetMap.get(t[i]) || 0) + 1)
}
for (let right = 0; right < s.length; right++) {
winMap.set(s[right], (winMap.get(s[right]) || 0) + 1);
while (isCover()) {
const tempStr = s.slice(left, right + 1);
ans = ans === '' ? tempStr : tempStr.length > ans.length ? ans : tempStr;
const leftVal = winMap.get(s[left])
if (leftVal > 1) {
winMap.set(s[left], leftVal - 1)
} else {
winMap.delete(s[left])
}
left++
}
}
return ans;
function isCover() {
for (let k of targetMap.keys()) {
if (!winMap.has(k) || winMap.get(k) < targetMap.get(k)) return false
}
return true
}
};
// @lc code=end
console.log(minWindow("ADOBECODEBANC", "ABC"))
console.log(minWindow("a", "aa"))
console.log(minWindow("cabwefgewcwaefgcf", "cae"))