Longest Substring Without Repeating Characters - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
내 풀이:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
def lengthOfLongestSubstring(s):
if not s:
return 0
ans = []
temp = []
for char in s:
if char not in temp:
temp.append(char)
else:
ans.append(len(temp))
start = temp.index(char) + 1
temp = temp[start:]
temp.append(char)
# 남아있는 temp 의 길이도 ans 에 추가
if temp != []:
ans.append(len(temp))
return max(ans)
s = 'dvdf'
# s = 'pwekgeabcdf'
print(lengthOfLongestSubstring(s))
|
cs |
해시를 사용한 풀이
1
2
3
4
5
6
7
8
9
10
|
def lengthOfLongestSubstring(s):
used = dict()
max_len = start = 0
for index, char in enumerate(s):
if char in used and start <= used[char]:
start = used[char] + 1
else:
max_len = max(max_len, index - start + 1)
used[char] = index
|
cs |
두 풀이 모두 char의 index를 생각해야 하는 것이 핵심이다.
dict를 사용할 때, value에 index를 넣는 방식을 항상 염두하자.
ex) 같은 'a'가 들어오면 기존에 있던 'a'의 index를 찾아서 index + 1부터 새로운 부분 문자열을 구성한다.
01234567
abcabcbb
abcabcbb
abcabcbb
'알고리즘 문제풀이 with 파이썬 > LeetCode' 카테고리의 다른 글
[DFS, 백트래킹] Number of Islands (0) | 2021.09.19 |
---|---|
[해시] Top K Frequent Elements (0) | 2021.09.18 |
[해시] Jewels and Stones (0) | 2021.09.18 |
[스택] Daily Temperatures (0) | 2021.09.14 |
[스택] Remove Duplicate Letters (0) | 2021.09.13 |