반응형
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
- 파이썬
- 리액트
- Medium
- 백준
- typescript
- 프로그래밍
- 웹프로그래밍
- Level1
- Level3
- 자바스크립트
- 카카오
- web
- python
- Level2
- 고득점Kit
- LeetCode
- sql
- 배열
- VUE
- CS
- Doitvue.js입문
- javascript
- OS
- 리트코드
- 코테연습
- C++
- 프로그래머스
- 동적계획법
- react
- dp
Archives
- Today
- Total
[리트코드] 3. Longest Substring Without Repeating Characters 본문
반응형
3. Longest Substring Without Repeating Characters
문제
Given a string s, find the length of the longest substring without repeating characters.
제한사항
- 0 <= s.length <= 5 * 104
- s consists of English letters, digits, symbols and spaces.
풀이
한 개씩 붙여가면서 부분 문자열 만들기
현재 문자가 만든 부분 문자열에 포함되어 있으면 부분 문자열 길이 갱신하고 포함되지 않을 때까지 앞에서 하나씩 자르기
예) "abcabcbb"
a
ab
abc
a가 이미 포함되어 있으므로 앞에 자르기
bca
b가 이미 포함되어 있으므로 앞에 자르기
cab
.
.
마지막에 부분문자열 길이와 이전에 저장된 값 한번 더 비교
("au" 처럼 wihle 문 실행되지 않고 종료될 경우를 대비)
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
sub_str = ""
answer = 0
for end in range(len(s)):
while s[end] in sub_str:
answer = max(len(sub_str), answer)
sub_str = sub_str[1:]
sub_str += s[end]
answer = max(len(sub_str), answer)
return answer
슬라이드 윈도우 방식
start와 end를 0에 놓고 end를 움직인다.
해시맵을 사용해 문자열의 중복을 체크한다.
반복된 문자열이 현재 window에 포함되지 않은 경우 상관 없으므로 무시한다.
반복된 문자열이 현재 window에 포함된 경우 start를 해당 위치 앞으로 옮겨서 windwo에서 제거한다.
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
max_length, start = 0, 0
checked = {}
for end in range(len(s)):
if s[end] not in checked: # 처음 나온 문자일 때
max_length = max(max_length, end - start + 1)
else: # 반복된 문자일 때
if checked[s[end]] < start: # 반복된 문자열이 현재 window에 포함되지 않을 경우
max_length = max(max_length, end - start + 1)
else: # 반복된 문자열이 start 다음일 경우 해당 위치로 start 이동
start = checked[s[end]] + 1
checked[s[end]] = end
return max_length
반응형
'코테 문제 풀이' 카테고리의 다른 글
[리트코드] 125. Valid Palindrome - python (0) | 2022.04.13 |
---|---|
[리트코드] 49. Group Anagrams - python (0) | 2022.04.13 |
[리트코드] 415. Add Strings - python (0) | 2022.04.12 |
[프로그래머스] 큰 수 만들기 - python (0) | 2022.04.12 |
[리트코드] 1578. Minimum Time to Make Rope Colorful (0) | 2022.04.12 |
Comments