반응형
문제 출처 :
https://leetcode.com/problems/longest-substring-without-repeating-characters/
알고리즘 분석 :
문제 해결에 필요한 사항
1. deque
2. dict
값이 들어올 때마다 우선 dict에 포함시켜주고 덱에 추가해준다.
이때 만약 dict에 있는 값이 중복으로 들어온다면 덱에 첫번째 값이 중복으로 들어온 값까지 다 빼주고
덱에 가장 왼쪽값을 하나 빼준 후 현재 값을 오른쪽에 추가해준다.
이것을 반복하면 정답을 구할 수 있다.
소스 코드 :
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 | from collections import deque class Solution: def lengthOfLongestSubstring(self, s: str) -> int: cur = 0 ans = 0 dq = deque() length = len(s) dic = {} for i in range(0, length): if s[i] not in dic: dq.append(s[i]) dic[s[i]] = 1 cur += 1 ans = max(ans, cur) else: print(i , s[i]) while dq and dq[0] != s[i]: left = dq.popleft() del dic[left] cur -= 1 left = dq.popleft() del dic[left] cur -= 1 dic[s[i]] = 1 dq.append(s[i]) cur += 1 ans = max(ans, cur) return ans | cs |
반응형
'Applied > 알고리즘 문제풀이' 카테고리의 다른 글
[4번] Median of Two Sorted Arrays (0) | 2019.05.31 |
---|---|
[SwExpertAcademy] 롤러코스터 (0) | 2019.05.29 |
[2번] Add Two Numbers (0) | 2019.05.01 |
[211번] Add and Search Word (0) | 2019.04.27 |
[1260번] 화학물질2 (0) | 2019.04.27 |