Skip to content

Commit 7f329f5

Browse files
committed
longest substring without repeating characters solution (py)
1 parent 59632e8 commit 7f329f5

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
"""
2+
๋ฌธ์ž์—ด s๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ค‘๋ณต๋œ ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๊ฐ€์žฅ ๊ธด ์—ฐ์†๋œ substring์„ ์ฐพ์•„๋ผ
3+
4+
1. ์ฒซ๋ฒˆ์งธ ํ’€์ด
5+
6+
Hint!
7+
Generate all possible substrings & check for each substring if it's valid and keep updating maxLen accordingly.
8+
9+
TC: O(N^3)
10+
SC: O(N)
11+
=> Time Limit Exceeded
12+
13+
2. ์ตœ์ ํ™” - ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ + ํ•ด์‹œ์…‹
14+
- ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ: ๋ฌธ์ž์—ด ๋‚ด์—์„œ left, right ํฌ์ธํ„ฐ๋กœ ๋ฒ”์œ„๋ฅผ ์ •ํ•˜๊ณ  ์ ์ง„์ ์œผ๋กœ ์ด๋™
15+
- ํ•ด์‹œ์…‹: ํ˜„์žฌ ์œˆ๋„์šฐ์— ์–ด๋–ค ๋ฌธ์ž๊ฐ€ ์žˆ๋Š”์ง€ ๋น ๋ฅด๊ฒŒ ์ฒดํฌ ๊ฐ€๋Šฅ
16+
- ์ค‘๋ณต ๋ฌธ์ž๊ฐ€ ๋“ฑ์žฅํ•˜๋ฉด ์™ผ์ชฝ ํฌ์ธํ„ฐ๋ฅผ ์ด๋™์‹œ์ผœ์„œ ์ค‘๋ณต์„ ์ œ๊ฑฐ
17+
18+
TC: O(N)
19+
SC: O(N)
20+
"""
21+
22+
# Time Limit Exceeded ํ’€์ด
23+
class Solution:
24+
def lengthOfLongestSubstring(self, s: str) -> int:
25+
max_len = 0
26+
27+
# Generate all possible substrings without duplicate characters
28+
def make_all_substrings(string):
29+
nonlocal max_len
30+
n = len(string)
31+
for i in range(n):
32+
for j in range(i + 1, n + 1):
33+
k = len(string[i:j])
34+
if k == len(list(set(string[i:j]))): # if it's valid
35+
max_len = max(k, max_len) # keep updating maxLen accordingly
36+
37+
make_all_substrings(s)
38+
return max_len
39+
40+
41+
# ์ตœ์ ํ™” - ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ + ํ•ด์‹œ์…‹ ํ’€์ด
42+
class Solution:
43+
def lengthOfLongestSubstring(self, s: str) -> int:
44+
char_set = set() # ํ˜„์žฌ ์œˆ๋„์šฐ์— ์žˆ๋Š” ๋ฌธ์ž๋“ค
45+
left = 0
46+
max_len = 0
47+
48+
for right in range(len(s)):
49+
# ์ค‘๋ณต ๋ฌธ์ž๊ฐ€ ๋‚˜์˜ค๋ฉด ์™ผ์ชฝ ํฌ์ธํ„ฐ๋ฅผ ์ด๋™์‹œ์ผœ ์ค‘๋ณต ์ œ๊ฑฐ
50+
while s[right] in char_set:
51+
char_set.remove(s[left])
52+
left += 1
53+
54+
# ์ค‘๋ณต์ด ์—†์œผ๋ฉด ์œˆ๋„์šฐ์— ์ถ”๊ฐ€
55+
char_set.add(s[right])
56+
57+
# ์ตœ๋Œ€ ๊ธธ์ด ๊ฐฑ์‹ 
58+
max_len = max(max_len, right - left + 1)
59+
60+
return max_len

0 commit comments

Comments
ย (0)