Given two strings s
and t
, return the minimum window in s
which will contain all the characters in t
. If there is no such window in s
that covers all characters in t
, return the empty string ""
.
Note that If there is such a window, it is guaranteed that there will always be only one unique minimum window in s
.
Example 1:
Input: s = "ADOBECODEBANC", t = "ABC" Output: "BANC"
Example 2:
Input: s = "a", t = "a" Output: "a"
Constraints:
1 <= s.length, t.length <= 105
s
andt
consist of English letters.
Follow up: Could you find an algorithm that runs in
O(n)
time?
function minWindow(s: string, t: string): string {
let n1 = s.length,
n2 = t.length;
if (n1 < n2) return "";
let need = new Array(128).fill(0);
let window = new Array(128).fill(0);
for (let i = 0; i < n2; ++i) {
++need[t.charCodeAt(i)];
}
let left = 0,
right = 0;
let res = "";
let count = 0;
let min = n1 + 1;
while (right < n1) {
let cur = s.charCodeAt(right);
++window[cur];
if (need[cur] > 0 && need[cur] >= window[cur]) {
++count;
}
while (count == n2) {
cur = s.charCodeAt(left);
if (need[cur] > 0 && need[cur] >= window[cur]) {
--count;
}
if (right - left + 1 < min) {
min = right - left + 1;
res = s.slice(left, right + 1);
}
--window[cur];
++left;
}
++right;
}
return res;
}