1 /**
2 * @param {string} s
3 * @param {string} t
4 * @return {string}
5 */
6 var minWindow = function (s, t) {
7 if (s.length < t.length) {
8 return '';
9 };
10 const map = new Map();
11 for (const key of t) {
12 map.set(key, (map.get(key) || 0) + 1);
13 };
14 let ans = '';
15 // const arr = [];
16 let need = t.length;
17 let left = 0;
18 for (let right = 0; right < s.length; right++) {
19 const c = s[right];
20 if (map.has(c)) {
21 map.set(c, map.get(c) - 1);
22 // arr.push(right);
23 if (map.get(c) >= 0) {
24 need -= 1;
25 }
26 }
27 while (need === 0) {
28 // const newAns = s.slice(arr[0], right + 1);
29 const newAns = s.slice(left, right + 1);
30 if (!ans) {
31 ans = newAns;
32 }
33 if (newAns.length < ans.length) {
34 ans = newAns;;
35 }
36 // const left = arr.shift();
37 // map.set(s[left], map.get(s[left]) + 1);
38 // need = map.get(s[left]);
39 const c = s[left];
40 if (map.has(c)) {
41 map.set(c, map.get(c) + 1);
42 if (map.get(c) === 1) {
43 need += 1;
44 }
45 }
46 left++;
47 }
48 }
49 return ans;
50 };