Skip to content

Commit 8621430

Browse files
committed
5. Minimum Window Substring
1 parent e773cf0 commit 8621430

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

minimum-window-substring/sunjae.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* @description
3+
* brainstorming:
4+
* two pointer + hash table
5+
*
6+
* n = length of s
7+
* m = length of t
8+
* time complexity: O(n*n)
9+
* space complexity: O(n)
10+
*/
11+
var minWindow = function (s, t) {
12+
const requiredMap = t.split("").reduce((map, char) => {
13+
map.set(char, (map.get(char) ?? 0) + 1);
14+
return map;
15+
}, new Map());
16+
const requiredArray = [...requiredMap.entries()];
17+
const map = new Map();
18+
const successRequired = () =>
19+
requiredArray.every(([key, value]) => map.get(key) >= value);
20+
21+
let answer = "";
22+
let start = 0;
23+
24+
for (let i = 0; i < s.length; i++) {
25+
if (requiredMap.has(s[i])) map.set(s[i], (map.get(s[i]) ?? 0) + 1);
26+
27+
while (successRequired()) {
28+
const now = s.slice(start, i + 1);
29+
answer = answer === "" || answer.length >= now.length ? now : answer;
30+
31+
if (map.has(s[start])) {
32+
map.set(s[start], map.get(s[start]) - 1);
33+
if (map.get(s[start]) === -1) map.delete(s[start]);
34+
}
35+
36+
start++;
37+
}
38+
}
39+
40+
return answer;
41+
};

0 commit comments

Comments
 (0)