소소한 컴퓨터 이야기

중복 문자 없는 가장 긴 부분 문자열

by Cori

문제

중복 문자가 없는 가장 긴 부분 문자열의 길이를 리턴하라 

 

· 입출력 예

string return
"abcabcbb" 3 (abc)
"bbbbb" 1 (b)
"pwwkew" 3 (wke)

풀이

1. 슬라이딩 윈도우와 투 포인터 사이즈 조절

def lengthOfLongestSubstring(s: str) -> int:
    used = {}
    max_length = start = 0 
    for index, char in enumerate(s):
        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

투 포인터로 문제를 풀이하였는데, 포인터 2개 모두 왼쪽에서 출발한다. 두 번째 포인터 (index)를 오른쪽으로 확장시켜 나가며 문자열을 검사한다. 문자가 앞서 등장했는지 여부를 판단하고, 등장했을 경우 시작점을 갱신한다 (start = used[char] + 1). 등장했는지 여부를 판단할 때, 슬라이딩 윈도우 범위 밖의 문자는 비교 대상에 포함하면 안되기 때문에 start <= used[char] 조건을 추가해주었다.

 

등장하지 않았던, 처음 보는 문자라면 max 함수를 통해 부분 문자열의 길이를 확인하며 더 큰 값인 경우, 최대 길이를 갱신한다.

'CS > Coding Test' 카테고리의 다른 글

부분 집합  (0) 2021.10.10
이진수 변환  (0) 2021.10.08
팩토리얼  (2) 2021.10.07
전화번호 문자 조합  (0) 2021.10.06
섬의 개수  (0) 2021.10.05

블로그의 정보

코딩하는 오리

Cori

활동하기