Skip to content

Commit aeb4708

Browse files
committed
Minimum Window Substring Solution
1 parent a1bf150 commit aeb4708

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/**
2+
* ๋ฌธ์ž์—ด s์—์„œ ๋ฌธ์ž์—ด t์˜ ๋ชจ๋“  ๋ฌธ์ž(์ค‘๋ณต ํฌํ•จ)๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐ€์žฅ ์งง์€ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ์ฐพ๋Š” ๋ฌธ์ œ
3+
* ์‹œ๊ฐ„๋ณต์žก๋„: O(m + n), ๊ณต๊ฐ„๋ณต์žก๋„: O(m + n)
4+
*/
5+
6+
/**
7+
* @param {string} s
8+
* @param {string} t
9+
* @return {string}
10+
*/
11+
var minWindow = function (s, t) {
12+
if (s.length < t.length) return '';
13+
14+
// t์˜ ๊ฐ ๋ฌธ์ž๋ณ„ ํ•„์š”ํ•œ ๊ฐœ์ˆ˜๋ฅผ Map์œผ๋กœ ์ €์žฅ
15+
const need = new Map();
16+
for (let char of t) {
17+
need.set(char, (need.get(char) || 0) + 1);
18+
}
19+
20+
let left = 0;
21+
let right = 0;
22+
let valid = 0; // ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฌธ์ž ์ข…๋ฅ˜ ์ˆ˜
23+
let minLen = Infinity;
24+
let start = 0;
25+
26+
// ํ˜„์žฌ ์œˆ๋„์šฐ์˜ ๋ฌธ์ž๋ณ„ ๊ฐœ์ˆ˜
27+
const window = new Map();
28+
29+
while (right < s.length) {
30+
// ์œˆ๋„์šฐ์— ๋ฌธ์ž ์ถ”๊ฐ€
31+
const rightChar = s[right];
32+
right++;
33+
34+
// ํ•„์š”ํ•œ ๋ฌธ์ž์ธ ๊ฒฝ์šฐ์—๋งŒ ์ฒ˜๋ฆฌ
35+
if (need.has(rightChar)) {
36+
window.set(rightChar, (window.get(rightChar) || 0) + 1);
37+
if (window.get(rightChar) === need.get(rightChar)) {
38+
valid++;
39+
}
40+
}
41+
42+
// ์œˆ๋„์šฐ ์ถ•์†Œ ์‹œ๋„
43+
while (valid === need.size) {
44+
// ๋” ์ž‘์€ ์œˆ๋„์šฐ ๋ฐœ๊ฒฌ์‹œ ์—…๋ฐ์ดํŠธ
45+
if (right - left < minLen) {
46+
start = left;
47+
minLen = right - left;
48+
}
49+
50+
// left๋ฅผ ์ด๋™์‹œํ‚ค๋ฉฐ ์œˆ๋„์šฐ์—์„œ ๋ฌธ์ž ์ œ๊ฑฐ
51+
const leftChar = s[left];
52+
left++;
53+
54+
if (need.has(leftChar)) {
55+
if (window.get(leftChar) === need.get(leftChar)) {
56+
valid--;
57+
}
58+
window.set(leftChar, window.get(leftChar) - 1);
59+
}
60+
}
61+
}
62+
63+
return minLen === Infinity ? '' : s.substring(start, start + minLen);
64+
};

0 commit comments

Comments
ย (0)