Skip to content

Commit a0c0815

Browse files
committed
Longest Substring Without Repeating Characters
1 parent fb26cbd commit a0c0815

File tree

1 file changed

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

1 file changed

+55
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
"""
2+
๐Ÿ“š 3. Longest Substring Without Repeating Characters
3+
4+
๐Ÿ“Œ ๋ฌธ์ œ ์š”์•ฝ
5+
- ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด s์—์„œ ์ค‘๋ณต ๋ฌธ์ž๊ฐ€ ์—†๋Š” ๊ฐ€์žฅ ๊ธด ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด ์ฐพ๊ธฐ
6+
- ์˜ˆ: "abcabcbb" โ†’ "abc" โ†’ 3
7+
8+
๐ŸŽฏ ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜
9+
- ํŒจํ„ด: ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ (Sliding Window) + ํ•ด์‹œ๋งต
10+
- ์‹œ๊ฐ„๋ณต์žก๋„: O(n)
11+
- ๊ณต๊ฐ„๋ณต์žก๋„: O(min(n, m)) - m์€ ๋ฌธ์ž ์ง‘ํ•ฉ ํฌ๊ธฐ
12+
13+
๐Ÿ’ก ํ•ต์‹ฌ ์•„์ด๋””์–ด
14+
1. left, right ๋‘ ํฌ์ธํ„ฐ๋กœ ์œˆ๋„์šฐ ๊ด€๋ฆฌ
15+
2. ํ•ด์‹œ๋งต์— ๊ฐ ๋ฌธ์ž์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜ ์ €์žฅ
16+
3. ์ค‘๋ณต ๋ฐœ๊ฒฌ ์‹œ โ†’ left๋ฅผ ์ค‘๋ณต ๋ฌธ์ž ๋‹ค์Œ์œผ๋กœ ์ ํ”„!
17+
4. ๋งค ๋‹จ๊ณ„๋งˆ๋‹ค ์œˆ๋„์šฐ ํฌ๊ธฐ(right - left + 1) ์ตœ๋Œ“๊ฐ’ ๊ฐฑ์‹ 
18+
"""
19+
20+
21+
class Solution:
22+
def lengthOfLongestSubstring(self, s: str) -> int:
23+
char_index = {} # ๋ฌธ์ž โ†’ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค
24+
left = 0
25+
max_len = 0
26+
27+
for right, char in enumerate(s):
28+
# ์ค‘๋ณต ๋ฌธ์ž๊ฐ€ ํ˜„์žฌ ์œˆ๋„์šฐ ์•ˆ์— ์žˆ์œผ๋ฉด
29+
if char in char_index and char_index[char] >= left:
30+
left = char_index[char] + 1 # ์ค‘๋ณต ๋‹ค์Œ์œผ๋กœ ์ ํ”„
31+
32+
char_index[char] = right # ํ˜„์žฌ ์œ„์น˜ ๊ฐฑ์‹ 
33+
max_len = max(max_len, right - left + 1)
34+
35+
return max_len
36+
37+
38+
# Set์„ ์‚ฌ์šฉํ•œ ๋ฐฉ์‹ (๋” ์ง๊ด€์ )
39+
class SolutionWithSet:
40+
def lengthOfLongestSubstring(self, s: str) -> int:
41+
char_set = set()
42+
left = 0
43+
max_len = 0
44+
45+
for right in range(len(s)):
46+
# ์ค‘๋ณต์ด ์‚ฌ๋ผ์งˆ ๋•Œ๊นŒ์ง€ left ์ด๋™
47+
while s[right] in char_set:
48+
char_set.remove(s[left])
49+
left += 1
50+
51+
char_set.add(s[right])
52+
max_len = max(max_len, right - left + 1)
53+
54+
return max_len
55+

0 commit comments

Comments
ย (0)