Skip to content

Commit 7640bd7

Browse files
committed
solve: longest substring without repeating characters
1 parent 3c172da commit 7640bd7

File tree

1 file changed

+51
-0
lines changed
  • longest-substring-without-repeating-characters

1 file changed

+51
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/**
2+
* TC: O(S)
3+
* right์˜ S๋งŒํผ ์ˆœํšŒ + left์˜ S๋งŒํผ ์ˆœํšŒ
4+
* (๊ฐ ์ˆœํšŒ์˜ ๊ณฑ์ด ์•„๋‹Œ ํ•ฉ์ธ ์ด์œ ๋Š” right ์ˆœํšŒ ๋™์•ˆ left์˜ ์ตœ๋Œ€ ์ˆœํšŒ๊ฐ€ S์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.)
5+
*
6+
* SC: O(N)
7+
* usedCharacter์— S๋งŒํผ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
8+
*
9+
* S: s.length
10+
*/
11+
12+
/**
13+
* @param {string} s
14+
* @return {number}
15+
*/
16+
var lengthOfLongestSubstring = function (s) {
17+
// 1. ์‚ฌ์šฉ๋œ ๋ฌธ์ž๋ฅผ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•œ set
18+
const usedCharacter = new Set();
19+
20+
// 2. ์ •๋‹ต ์ œ์ถœ์„ ์œ„ํ•œ ๋ถ€๋ถ„๋ฌธ์ž์—ด ์ตœ๋Œ€ ๊ธธ์ด
21+
let maxLength = 0;
22+
23+
// 3. ์ˆœํšŒ๋ฅผ ์œ„ํ•œ ํฌ์ธํ„ฐ + ๊ฐ index์—์„œ ์ตœ๋Œ€ ๋ฌธ์ž์—ด๊ธธ์ด๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜
24+
let left = 0;
25+
let right = 0;
26+
27+
while (left <= right && right < s.length) {
28+
// 4. [right] ๋ฌธ์ž๊ฐ€ ์‚ฌ์šฉ๋˜์—ˆ์œผ๋ฉด
29+
if (usedCharacter.has(s[right])) {
30+
// 5. ์‚ฌ์šฉ๋œ ๋ฌธ์ž๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ธฐ ์ „๊นŒ์ง€ left ์ด๋™ (+ ์‚ฌ์šฉ๋œ [left] ๋ฌธ์ž ๊ธฐ๋ก ์ œ๊ฑฐ)
31+
while (s[left] !== s[right]) {
32+
usedCharacter.delete(s[left]);
33+
left += 1;
34+
}
35+
36+
// 6. [right] ๋ฌธ์ž์™€ [left] ๋ฌธ์ž๊ฐ€ ๋™์ผํ•˜๋ฏ€๋กœ left๋งŒ ์ด๋™
37+
left += 1;
38+
} else {
39+
// 7. [right] ๋ฌธ์ž๊ฐ€ ๋ฏธ์‚ฌ์šฉ๋˜์—ˆ์œผ๋ฉด ๊ธฐ๋ก ์ถ”๊ฐ€
40+
usedCharacter.add(s[right]);
41+
}
42+
43+
// 8. ์ค‘๋ณต์—†๋Š” ๋ถ€๋ถ„๋ฌธ์ž์—ด ์ตœ๋Œ€ ๊ธธ์ด ๊ฐฑ์‹ 
44+
maxLength = Math.max(maxLength, right - left + 1);
45+
46+
// 9. ๋‹ค์Œ ๋ฌธ์ž๋กœ ์ด๋™
47+
right += 1;
48+
}
49+
50+
return maxLength;
51+
};

0 commit comments

Comments
ย (0)