/**
* @param {string} s
* @param {string} t
* @return {string}
*/
var minWindow = function(s, t) {
if (s.length < t.length) {
return '';
}
const sMap = Array(256).fill(0);
const tMap = Array(256).fill(0);
for (const c of t) {
tMap[c.charCodeAt(0)]++;
}
let count = 0;
let start = 0;
let minStart = -1;
let min = s.length;
for (let j = 0; j < s.length; j++) {
const c = s[j].charCodeAt(0);
sMap[c]++;
if (sMap[c] <= tMap[c]) {
count++;
}
if (count === t.length) {
// Minimize the window by moving the start pointer.
while (sMap[s[start].charCodeAt(0)] > tMap[s[start].charCodeAt(0)]) {
sMap[s[start].charCodeAt(0)]--;
start++;
}
const currLen = j - start + 1;
if (currLen < min) {
min = currLen;
minStart = start;
}
}
}
if (minStart === -1 && count !== t.length) {
return '';
}
return minStart !== -1 ? s.substring(minStart, minStart + min) : s;
};
console.log(minWindow('ABCDFEDFI', 'DF'));
// DF
Categories