Skip to content

Commit 37934dd

Browse files
committed
add solution for longest substring without repeating characters problem
1 parent c52f8f2 commit 37934dd

1 file changed

Lines changed: 33 additions & 0 deletions

File tree

  • longest-substring-without-repeating-characters
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
"""
2+
# Approach
3+
์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
4+
right ํฌ์ธํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ์ด๋™์‹œํ‚ค๋ฉด์„œ ๋ฌธ์ž์—ด์„ ํ™•์žฅํ•˜๊ณ ,
5+
์ด๋ฏธ ๋“ฑ์žฅํ•œ ๋ฌธ์ž๋ฅผ ๋งŒ๋‚˜๋ฉด ํ•ด๋‹น ๋ฌธ์ž์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ left ํฌ์ธํ„ฐ๋ฅผ ์ด๋™์‹œ์ผœ ์ค‘๋ณต์ด ์—†๋Š” ๊ตฌ๊ฐ„์„ ์œ ์ง€ํ•œ๋‹ค.
6+
๊ฐ ๋‹จ๊ณ„์—์„œ ํ˜„์žฌ ์œˆ๋„์šฐ์˜ ๊ธธ์ด๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ์ตœ๋Œ€๊ฐ’์„ ๊ฐฑ์‹ ํ•œ๋‹ค.
7+
8+
# Complexity
9+
๋ฌธ์ž์—ด ๊ธธ์ด๋ฅผ N์ด๋ผ๊ณ  ํ•  ๋•Œ, ๋ฌธ์ž ์ข…๋ฅ˜ ์ˆ˜๋ฅผ K๋ผ๊ณ  ํ•  ๋•Œ
10+
- Time complexity: O(N)
11+
- Space complexity: O(K)
12+
"""
13+
14+
15+
class Solution:
16+
def lengthOfLongestSubstring(self, s: str) -> int:
17+
last_seen = {} # ๋ฌธ์ž -> ๋งˆ์ง€๋ง‰์œผ๋กœ ๋“ฑ์žฅํ•œ ์ธ๋ฑ์Šค
18+
left = 0 # ํ˜„์žฌ ์œˆ๋„์šฐ์˜ ์‹œ์ž‘ ์œ„์น˜
19+
answer = 0 # ์ตœ๋Œ€ ๊ธธ์ด ์ €์žฅ
20+
21+
for right, ch in enumerate(s):
22+
# ํ˜„์žฌ ๋ฌธ์ž๊ฐ€ ์ด์ „์— ๋“ฑ์žฅํ–ˆ๊ณ ,
23+
# ๊ทธ ์œ„์น˜๊ฐ€ ํ˜„์žฌ ์œˆ๋„์šฐ ์•ˆ์— ์žˆ๋‹ค๋ฉด left ์ด๋™
24+
if ch in last_seen and last_seen[ch] >= left:
25+
left = last_seen[ch] + 1
26+
27+
# ํ˜„์žฌ ๋ฌธ์ž์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜ ๊ฐฑ์‹ 
28+
last_seen[ch] = right
29+
30+
# ํ˜„์žฌ ์œˆ๋„์šฐ ๊ธธ์ด ๊ณ„์‚ฐ ๋ฐ ์ตœ๋Œ€๊ฐ’ ๊ฐฑ์‹ 
31+
answer = max(answer, right - left + 1)
32+
33+
return answer

0 commit comments

Comments
ย (0)