반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 아스테리스크 #Asterisk #파이썬
- AsyncTask #doinbackground #스레드 #thread #android #안드로이드
- 다익스트라 #알고리즘 #bfs #그리디 #다이나믹프로그래밍 #leetcode #python
- dfs #이진트리 #트리구조 #직렬화 #역직렬화 #파이썬 #리트코드 #leetcode #python
- Python #leetcode #dfs #그래프 #백트래킹
- dfs #python #leetcode #combination
- handler #looper #thread #runnable #핸들러 #루퍼 #스레드 #러너블
- 다익스트라 #dijkstra #leetcode #파이썬 #python #algorithm #787
- python #백준 #2580 #스도쿠 #dfs #백트래킹
- leetcode #python #dfs #재귀
- python #백준 #9375 #패션왕 #신해빈
- final #java #자바 #안드로이드
- 리트코드 #팰린드롬 #파이썬
- dfs #bfs #트리구조 #이진트리 #leetcode #파이썬 #python
- dfs #bfs #leetcode #python
- dfs #bfs #트리구조 #이진트리 #leetcode #python #파이썬
- 파이썬 #zip
- dfs #그래프 #graph #python #leetcode #course #schedule
- 백준 #파이썬 #bfs #백트래킹 #1697 #숨바꼭질
- leetcode #subsets #dfs #itertools #python
- dfs #python #leetcode
- context #android #getApplicationContext #activity #생명주기 #lifecycle
- dfs #leetcode #python
- exoplayer #mediaplayer #엑소플레이어 #안드로이드 #android
- dfs #leetcode #python #graph #그래프
- gcd #최대공약수 #백준 #2981 #검문
- 코틀린 #Do it #깡샘 #안드로이드
- 2004 #조합 0의 개수 #백준
- dfs #bfs #이진트리 #파이썬 #리트코드
- 해시테이블 #heapq #파이썬 #리트코드 #알고리즘
Archives
- Today
- Total
멋진 개발자가 되고 싶다
[LeetCode/Python] 3. 중복 문자 없는 가장 긴 문자열(Longest Substring Without Repeating Charactors) 본문
Algorithm Study/leetcode
[LeetCode/Python] 3. 중복 문자 없는 가장 긴 문자열(Longest Substring Without Repeating Charactors)
오패산개구리 2021. 7. 18. 13:57728x90
반응형
중복 문자가 없는 가장 긴 부분 문자열(Substring)의 길이를 리턴하라.
Input: s = "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.
보통 문자열이나 리스트를 대상으로 여러 인덱스를 앞에서부터 비교해나가는 문제는
투 포인터나 슬라이딩 윈도를 이용하여 해결할 수 있다.
** 깔끔한 답안 **
1. 슬라이딩 윈도우와 투 포인터로 사이즈 조절
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
used = {}
max_length = start = 0
for index, char in enumerate(s):
# 이미 등장했던 문자라면 'start' 위치 갱신
if char in used and start <= used[char]:
start = used[char] + 1
else: # 최대 부분 문자열 길이 갱신
max_length = max(max_length, index - start + 1)
# 현재 문자의 위치 삽입
used[char] = index
return max_length
|
cs |
해설:
위 코드에서 start가 left, index가 right인 투 포인터라고 생각할 수 있다.
used에 존재하지 않는 문자가 있으면 지속적으로 max를 통해 최대 부분 문자열 길이를 갱신해주고
used에 현재 문자와 함께 인덱스 값을 넣어준다.
이런 식으로 진행하다가 이미 등장했던 문자가 등장하면 start를 이전에 등장한 문자의 그다음으로 바꿔준다.
( s = "abcabcbb"로 진행해보면 이해가 쉽다)
[출처: 파이썬 알고리즘 인터뷰(박상길 지음 / 정진호 일러스트 / 출판사 책만)]
728x90
반응형
'Algorithm Study > leetcode' 카테고리의 다른 글
[LeetCode/Python] 200. 섬의 개수(Number of Islands) (0) | 2021.07.24 |
---|---|
[LeetCode/Python] 347. 상위 K 빈도 요소(Top K Frequent Elements) (0) | 2021.07.18 |
[LeetCode,Python] 771. 보석과 돌(Jewels and Stones) (0) | 2021.07.17 |
[LeetCode,Python] 706. 해시 맵 디자인(Design HashMap) (0) | 2021.07.17 |
[LeetCode,Python] 23. k개 정렬 리스트 병합(Merge k Sorted Lists) (0) | 2021.07.15 |