|
| 1 | +/** |
| 2 | + * ์ค๋ณต ๋ฌธ์ ์์ด ๊ฐ์ฅ ๊ธด ๋ถ๋ถ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์ฐพ๊ธฐ (๋ถ๋ถ ๋ฌธ์์ด์ ์ฐ์๋ ๋ฌธ์๋ค์ ์งํฉ์ด์ด์ผ ํจ) |
| 3 | + * |
| 4 | + * ์ฌ๋ผ์ด๋ฉ ์๋์ฐ(Sliding Window) ๊ธฐ๋ฒ |
| 5 | + * ์ ๊ทผ ๋ฐฉ๋ฒ: |
| 6 | + * 1. ์์ํฌ์ธํฐ(left)์ ๋ํฌ์ธํฐ(right)๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ฐ ์ ์ |
| 7 | + * 2. ๋ฌธ์์ ๋ฑ์ฅ์ฌ๋ถ๋ Map์ ์ฌ์ฉํ์ฌ ์ถ์ |
| 8 | + * 3. ๋ ํฌ์ธํฐ๋ฅผ ์ด๋์ํค๋ฉด์ ์๋์ฐ ํ์ฅ |
| 9 | + * 4. ์ค๋ณต ๋ฌธ์๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ์์ ํฌ์ธํฐ๋ฅผ ์ด๋์์ผ ์๋์ฐ ์ถ์ |
| 10 | + * 5. ์ต๋ ๊ธธ์ด๋ฅผ ์
๋ฐ์ดํธ |
| 11 | + * |
| 12 | + * ์๊ฐ๋ณต์ก๋: O(n), ๊ณต๊ฐ๋ณต์ก๋: O(min(n, m)) (n: ๋ฌธ์์ด ๊ธธ์ด, m: ๋ฌธ์ ์งํฉ ํฌ๊ธฐ) |
| 13 | + */ |
| 14 | +/** |
| 15 | + * @param {string} s |
| 16 | + * @return {number} |
| 17 | + */ |
| 18 | +var lengthOfLongestSubstring = function (s) { |
| 19 | + if (!s.length) return 0; |
| 20 | + |
| 21 | + let maxLength = 0; |
| 22 | + let left = 0; // ์์ ํฌ์ธํฐ(์๋์ฐ ์ผ์ชฝ ๊ฒฝ๊ณ) |
| 23 | + const charMap = new Map(); |
| 24 | + |
| 25 | + for (let right = 0; right < s.length; right++) { |
| 26 | + const currentChar = s[right]; // ํ์ฌ ๋ฌธ์ |
| 27 | + |
| 28 | + // ํ์ฌ๋ฌธ์๊ฐ ์ด๋ฏธ Map์ ์๊ณ , ๊ทธ ์ธ๋ฑ์ค(์์น)๊ฐ ํ์ฌ ์๋์ฐ ๋ด์ ์๋ค๋ฉด |
| 29 | + if (charMap.has(currentChar) && charMap.get(currentChar) >= left) { |
| 30 | + // ์์ํฌ์ธํฐ(์๋์ฐ ์ผ์ชฝ ๊ฒฝ๊ณ)๋ฅผ ์ค๋ณต๋ ๋ฌธ์์ ๋ค์์์น๋ก ์ด๋ |
| 31 | + left = charMap.get(currentChar) + 1; |
| 32 | + } |
| 33 | + |
| 34 | + // ํ์ฌ ๋ฌธ์์ ์ธ๋ฑ์ค๋ฅผ Map์ ์ ์ฅ |
| 35 | + charMap.set(currentChar, right); |
| 36 | + |
| 37 | + // ํ์ฌ ์๋์ฐ์ ๊ธธ์ด์ ๊ธฐ์กด ์ต๋ ๊ธธ์ด ์ค ํฐ ๊ฐ์ ์ ํ |
| 38 | + // right - left + 1: ํ์ฌ ์๋์ฐ์ ๊ธธ์ด |
| 39 | + maxLength = Math.max(maxLength, right - left + 1); |
| 40 | + } |
| 41 | + return maxLength; // ์ต๋ ๊ธธ์ด ๋ฆฌํด |
| 42 | +}; |
0 commit comments