문제 정리

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

→ 중요한 건 가장 긴 부분 문자열이라는 것이다.

→ 예를들어 입력값이 “pwwkew” → wke가 정답이다 ( 부분문자열 )

접근 방법

→ 처음에는 큐를 이용하는 방식으로 접근했으나 부분 문자열을 출력하는 부분에서 막혔다.

→ 대게 이런 문제는 투포인터를 사용하는 것은 알고 있으나 한참 지나도 구현해내지 못해서 해설을 보았다.

해설 풀이

투포인터를 생성하고 슬라이딩 윈도우 방식으로 오른쪽으로 이동해나가면서 찾는 방법이다.

→ used는 해시테이블 역할을 하고 첫번째 포인터와 두번째 포인터는 각각 0에서부터 시작하도록 한다.

used = {}
    max_length = start = 0

→ 등장했던 문자라면 시작지점을 used[char] + 1 위치로 이동시킨다.

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