1. 문제
Given a string sfind the length of the longest substring without repeating characters.
2. 답안
1. set
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
charSet = set()
left = 0
ans = 0
for right in range(len(s)):
while s(right) in charSet:
charSet.remove(s(left))
left += 1
charSet.add(s(right))
ans = max(ans, right - left + 1)
return ans
2. 사전
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
dic = {}
left = 0
ans = 0
for right in range(len(s)):
if s(right) in dic:
left = max(left, dic(s(right)) + 1)
dic(s(right)) = right
ans = max(ans, right - left + 1)
return ans
중복하지 않는다는 점에서 주목해 set를 사용한다.
그 이외는 set나 dictionary 와도 알고리즘이 같다.
Exmaple 1을 예로 들자: “abcabcbb”
1) 출발점(left), 도착점(right) 설정
2) 출발점을 고정한 채로 right를 차례로 이동한다.
중복이 없으면 계속 추가합니다.
a → ab → abc
3) 중복 문자가 나오면 이전 문자를 삭제합니다.
abca→bca | bcab → cab | cabc → abc
4) 건너뛰고 같은 문자가 나오면 처음부터 삭제한다: abcb → cb
– 연속적인 부분 문자열을 요구하는 것이기 때문이다.
b만 제거하고 acb로 만들 수 없습니다.
5) 끝까지 계속: cbb → b
– 연속적인 부분 문자열을 요구하는 것이기 때문이다.
b만 제거하고 cb로 만들 수 없습니다.
6) 가장 긴 부분 문자열은 abc일 때, 길이는 3이다.
따라서 대답은 3입니다.
출처: set
출처: 사전
https://leetcode.com/problems/longest-substring-without-repeating-characters/