Programming/leetcode
3. Longest Substring Without Repeating Characters
홍열
2021. 2. 22. 20:04
728x90
가장 긴 부분 문자열 찾는 문제, 단 문자열 안에 중복이 없어야 한다.
나는 for문 2번 돌려서 풀긴했는데, 만약 input의 길이가 증가하면 시간 초과 날것이다.
def lengthOfLongestSubstring(self, s: str) -> int:
ans = 0
for idx, ch in enumerate(s):
cnt = 0
c = ""
for ch in s[idx:]:
if ch in c:
break
else:
c += ch
cnt += 1
ans = max(ans, cnt)
return ans
이전에 배운 hash를 여기서 사용하면 for문 한번과 hash 접근으로 가능하다.
def lengthOfLongestSubstring(self, s: str) -> int:
max_length = start = 0
used = {}
for idx, ch in enumerate(s):
# 이미 Dict에 있는경우 start값을 갱신해주자
if ch in used and start <= used[ch]:
start = used[ch]+1
else:
max_length = max(max_length, idx-start+1)
used[ch] = idx
return max_length
속도 차이가 300ms이상 나는 것을 볼 수 있다.