forked from DaleStudy/leetcode-study
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclara-shin.js
More file actions
42 lines (37 loc) ยท 1.59 KB
/
clara-shin.js
File metadata and controls
42 lines (37 loc) ยท 1.59 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
/**
* ์ค๋ณต ๋ฌธ์ ์์ด ๊ฐ์ฅ ๊ธด ๋ถ๋ถ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์ฐพ๊ธฐ (๋ถ๋ถ ๋ฌธ์์ด์ ์ฐ์๋ ๋ฌธ์๋ค์ ์งํฉ์ด์ด์ผ ํจ)
*
* ์ฌ๋ผ์ด๋ฉ ์๋์ฐ(Sliding Window) ๊ธฐ๋ฒ
* ์ ๊ทผ ๋ฐฉ๋ฒ:
* 1. ์์ํฌ์ธํฐ(left)์ ๋ํฌ์ธํฐ(right)๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ฐ ์ ์
* 2. ๋ฌธ์์ ๋ฑ์ฅ์ฌ๋ถ๋ Map์ ์ฌ์ฉํ์ฌ ์ถ์
* 3. ๋ ํฌ์ธํฐ๋ฅผ ์ด๋์ํค๋ฉด์ ์๋์ฐ ํ์ฅ
* 4. ์ค๋ณต ๋ฌธ์๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ์์ ํฌ์ธํฐ๋ฅผ ์ด๋์์ผ ์๋์ฐ ์ถ์
* 5. ์ต๋ ๊ธธ์ด๋ฅผ ์
๋ฐ์ดํธ
*
* ์๊ฐ๋ณต์ก๋: O(n), ๊ณต๊ฐ๋ณต์ก๋: O(min(n, m)) (n: ๋ฌธ์์ด ๊ธธ์ด, m: ๋ฌธ์ ์งํฉ ํฌ๊ธฐ)
*/
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function (s) {
if (!s.length) return 0;
let maxLength = 0;
let left = 0; // ์์ ํฌ์ธํฐ(์๋์ฐ ์ผ์ชฝ ๊ฒฝ๊ณ)
const charMap = new Map();
for (let right = 0; right < s.length; right++) {
const currentChar = s[right]; // ํ์ฌ ๋ฌธ์
// ํ์ฌ๋ฌธ์๊ฐ ์ด๋ฏธ Map์ ์๊ณ , ๊ทธ ์ธ๋ฑ์ค(์์น)๊ฐ ํ์ฌ ์๋์ฐ ๋ด์ ์๋ค๋ฉด
if (charMap.has(currentChar) && charMap.get(currentChar) >= left) {
// ์์ํฌ์ธํฐ(์๋์ฐ ์ผ์ชฝ ๊ฒฝ๊ณ)๋ฅผ ์ค๋ณต๋ ๋ฌธ์์ ๋ค์์์น๋ก ์ด๋
left = charMap.get(currentChar) + 1;
}
// ํ์ฌ ๋ฌธ์์ ์ธ๋ฑ์ค๋ฅผ Map์ ์ ์ฅ
charMap.set(currentChar, right);
// ํ์ฌ ์๋์ฐ์ ๊ธธ์ด์ ๊ธฐ์กด ์ต๋ ๊ธธ์ด ์ค ํฐ ๊ฐ์ ์ ํ
// right - left + 1: ํ์ฌ ์๋์ฐ์ ๊ธธ์ด
maxLength = Math.max(maxLength, right - left + 1);
}
return maxLength; // ์ต๋ ๊ธธ์ด ๋ฆฌํด
};