Skip to content

Commit cd17daa

Browse files
committed
Feat: 76. Minimum Window Substring
1 parent aff0d63 commit cd17daa

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

minimum-window-substring/HC-kang.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/**
2+
* https://leetcode.com/problems/minimum-window-substring
3+
* T.C. O(s + t)
4+
* S.C. O(t)
5+
*/
6+
function minWindow(s: string, t: string): string {
7+
let minLow = 0;
8+
let minHigh = s.length;
9+
10+
const counts: Record<string, number> = {};
11+
for (const c of t) {
12+
counts[c] = (counts[c] || 0) + 1;
13+
}
14+
15+
let included = 0;
16+
17+
let low = 0;
18+
for (let high = 0; high < s.length; high++) {
19+
if (counts[s[high]]) {
20+
if (counts[s[high]] > 0) {
21+
included++;
22+
}
23+
counts[s[high]]--;
24+
}
25+
26+
while (included === t.length) {
27+
if (high - low < minHigh - minLow) {
28+
minLow = low;
29+
minHigh = high;
30+
}
31+
32+
if (counts[s[low]]) {
33+
counts[s[low]]++;
34+
if (counts[s[low]] > 0) {
35+
included--;
36+
}
37+
}
38+
39+
low++;
40+
}
41+
}
42+
43+
return minHigh === s.length ? '' : s.substring(minLow, minHigh + 1);
44+
}

0 commit comments

Comments
 (0)