LeetCode 3. Longest Substring Without Repeating Characters [Python]

hysong·2022년 7월 30일
0

PS

목록 보기
4/15

📌 Problem.

https://leetcode.com/problems/longest-substring-without-repeating-characters/

가장 긴 부분 문자열의 길이를 반환하는 함수를 작성하는 문제이다.
단, 가장 긴 부분 문자열의 문자들은 각각 한 번씩만 사용되어야 한다.

📌 Solution.

def lengthOfLongestSubstring(self, s: str) -> int:
    used = {}
    maxlen = left = 0

    for right, char in enumerate(s):
        if char in used and left <= used[char]:
            left = used[char] + 1  # left-pointer moves.
        else:
            maxlen = max(maxlen, right - left + 1)
        used[char] = right

    return maxlen

딕셔너리 used에는, 문자를 새롭게 사용할 때마다 '문자: 사용된 지점의 인덱스' 형식의 데이터를 추가하거나 새롭게 업데이트한다.

만약 char가 이미 사용된 문자이고 left 포인터에 의해 그 char를 부분 문자열에서 이미 포함하고 있으면, left 포인터를 최소한으로 옮김으로써 char를 다시 새롭게 추가한 부분 문자열을 검사하게 된다.
만약 char가 사용되지 않은 문자라면, 현재 검사 중인 부분 문자열의 길이를 maxlen에 저장하여 갱신해나간다.

0개의 댓글