-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathlongest_substring_without_repeating_characters.py
More file actions
48 lines (40 loc) ยท 1.94 KB
/
longest_substring_without_repeating_characters.py
File metadata and controls
48 lines (40 loc) ยท 1.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# 3. Longest Substring Without Repeating Characters
# https://leetcode.com/problems/longest-substring-without-repeating-characters/
class Solution:
# ๋ฌธ์์ด์์ ๊ฐ์ฅ ๊ธด ์ค๋ณต(๋ ์บ๋ฆญํฐ๊ฐ) ์๋ ๋ถ๋ถ ๋ฌธ์์ด์ ์ฐพ๋ ๋ฌธ์ ๋ค.
def lengthOfLongestSubstring(self, s: str) -> int:
# O(n^2) ์ผ๋ก ๋ชจ๋ ๋ฌธ์๋ค์ ํ์ธํ๋ฉฐ ์ต๋ ๊ธธ์ด๋ฅผ ๊ฐฑ์ ํด ์ค๋ค.
# ๊ทธ๋ฅ ํ๋ฉด TLE ๊ฐ ๋จ๊ธฐ ๋๋ฌธ์, ํ์ฌ ๋ฌธ์์ด์ ์ค๋ณต๋ ๋ฌธ์๊ฐ ์๋์ง ํ์ธํ๋ ๊ฒ์ ํ๋ ๋ ๋ฃ์ด์ฃผ์๋ค.
# ์ด๋ ๊ฒ ํด๋ AC๊ฐ ๋ฌ๋ค.
"""
res = 0
for i in range(len(s)):
d = set()
for j in range(i + 1, len(s)+1):
if s[j-1] in d:
break
d.add(s[j-1])
res = max(res, j - i)
return res
"""
# ์ฌ๊ธฐ์ ์ ์ฒด ๋ฌธ์์ด์ ๊ณ์ ๋ฐ๋ณตํด์ ๋ณด๋๊ฒ ์๋๋ผ ๋ดค๋ ๋ฌธ์์ด์ ์คํต ํ๋๋ก ์๋ ์ฒ๋ผ ๋ณ๊ฒฝํ์๋ค.
if len(s) <= 1:
return len(s)
res = 0
i, j = 0, 0
d = set()
# ํฌ์ธํฐ ๋ ๊ฐ๋ก ์ค๋ณต ์๋ ์ต๋ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์ฐพ๋๋ค.
# ์๋ฅผ ๋ค์ด 0 ๋ฒ์งธ ๋ถํฐ 5๋ฒ์งธ ๋ฌธ์์ด ์์ ์ค๋ณต๋ ๋ฌธ์๊ฐ ์์ผ๋ฉด ํ์ฌ res ๊ฐ์ 6์ด ๋๋ค.
# ์ด ๋ set ์์๋ 0๋ฒ ๋ถํฐ 5๋ฒ์งธ ๊ธ์๊ฐ ๋ค์ด๊ฐ ์๊ฒ ๋๋ค.
# 6๋ฒ์งธ ๊ธ์๊ฐ ์ค๋ณต๋์๋ค๋ฉด ์ค๋ณต์ด ์๋ ๋ ๊น์ง i๋ฅผ 0์์ ๋ถํฐ ์ฆ๊ฐ์ํค๋ฉด์ set ์์ ์ ๊ฑฐํด์ค๋ค. (i๋ฅผ j๊น์ง ๋น๊ฒจ์ค๋ค๊ณ ์๊ฐํ ์ ์๋ค.)
# window ๋ฅผ ์ฎ๊ฒจ์ค๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
# ์ด๋ฅผ sliding window ๋ผ ๋ถ๋ฅธ๋ค.
while i < len(s) and j < len(s):
if s[j] not in d:
d.add(s[j])
res = max(res, j - i + 1)
j += 1
else:
d.remove(s[i])
i += 1
return res