forked from DaleStudy/leetcode-study
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjdy8739.js
More file actions
68 lines (55 loc) ยท 2.56 KB
/
jdy8739.js
File metadata and controls
68 lines (55 loc) ยท 2.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/**
* @param {string} s
* @param {string} t
* @return {string}
*/
var minWindow = function (s, t) {
let start = 0;
let end = 0;
/** t์ ๋ชจ๋ ๋ฌธ์์ด์ด ์ฌ๋ผ์ด๋ ์๋์ฐ์ ๋ฒ์์ ๋ค์ด์์ ๋, ๊ทธ ๋ฒ์์ ์ต์ ๊ธธ์ด */
let min = s.length;
/** while ๋ฌธ์ด ํ ๋ฒ ์ํํ ๋, start ๋๋ end๊ฐ ์ค end๊ฐ์ด ์ฆ๊ฐํ๋์ง ์ฌ๋ถ */
let isEndIndexUp = true;
/** min ๊ฐ์ด ๊ฐฑ์ ๋๋ฉด s๋ฌธ์์ด์ start, end ์ธ๋ฑ์ค๊ฐ์ ์ ์ฅํ ๋ณ์ */
let index = null;
/** ๋ฌธ์์ด t๊ฐ ๋ณด์ ํ ๋ฌธ์์ ํด๋น ๋ฌธ์๊ฐ ๋ค์ด์๋ ์๋ฅผ key, value๋ก ์ค์ ํ map๊ฐ์ฒด */
const charMap = t.split('').reduce((acc, cur) => {
if (acc.has(cur)) {
acc.set(cur, acc.get(cur) + 1);
} else {
acc.set(cur, 1);
}
return acc;
}, new Map());
while (end < s.length) {
const curChar = s[end];
if (isEndIndexUp && t.includes(curChar)) {
// end๊ฐ ์ฆ๊ฐ๋์๊ณ s์ end ์ธ๋ฑ์ค์ ๋ฌธ์๊ฐ t์ ์กด์ฌํ๋ค๋ฉด ํด๋น ํค์ ๊ฐ์ 1์ ๊ฐ์
charMap.set(curChar, charMap.get(curChar) - 1);
}
/** ๋ชจ๋ t์ ๋ฌธ์๋ค์ด ์ฌ๋ผ์ด๋ ์๋์ฐ์ ๋ฒ์์ ๋ค์ด์๋์ง ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋ ๋ถ๋ฆฐ๊ฐ */
const everyCharCollected = [...charMap].every(([_, value]) => value <= 0);
if (everyCharCollected) {
// ๋ชจ๋ ๋ฌธ์์ด์ด ์ฌ๋ผ์ด๋ ์๋์ฐ์ ๋ฌธ์์ด์ ํฌ์ฐฉ๋ ๊ฒฝ์ฐ
if (t.includes(s[start])) {
// s์ start ์ธ๋ฑ์ค ๋ฌธ์๊ฐ t์ ์กด์ฌํ๋ค๋ฉด charMap์ ํด๋น ํค์ ๊ฐ์ 1์ ์ฆ๊ฐ
charMap.set(s[start], (charMap.get(s[start]) || 0) + 1);
}
const gap = end - start;
if (gap < min) {
// t์ ๋ชจ๋ ๋ฌธ์๊ฐ ์ฌ๋ผ์ด๋ ์๋์ฐ์ ๋ฒ์์ ์๊ณ , ํ์ฌ ๊ทธ ์๋์ฐ์ ๊ธธ์ด๊ฐ ์ด์ ์ min๊ฐ ๋ณด๋ค ์๋ค๋ฉด ์
๋ฐ์ดํธ
min = gap;
index = [start, end];
}
start++;
isEndIndexUp = false;
} else {
// ์๋์ฐ์ ๋ฌธ์์ด์ด ํ๋๋ผ๋ ๋ถ์กฑํ ๊ฒฝ์ฐ
end++;
isEndIndexUp = true;
}
}
return index ? s.slice(index[0], index[1] + 1) : '';
};
// ๊ณต๊ฐ๋ณต์ก๋ O(t) -> ์ต๋ t์ ๊ธธ์ด์ ๋ฐ๋ผ ๋งต์ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๋ฏ๋ก
// ์๊ฐ๋ณต์ก๋ O(s * t) -> s๋ฅผ ์ํํ๋ while ๋ฌธ์์ ์ต๋ O(t)์ ๊ณต๊ฐ๋ณต์ก๋๋ฅผ ๋ฐ๋ฅด๋ map ๊ฐ์ฒด๊ฐ ๋ฐฐ์ด๋ก ๋ณํ๋์ด every ๋ฉ์๋๊ฐ ํธ์ถ๋๊ธฐ ๋๋ฌธ์