Longest Substring Without Repeating Characters
문자열에서 모든 문자가 한 번만 나타나는 연속된 문자 구간을 찾아보세요. coddycode에서 ycode 구간은 서로 다른 문자 다섯 개로 이루어져 있고, 반복 없이 더 긴 구간은 없으므로 답은 5입니다.
가능한 모든 구간을 확인해도 되지만, 느립니다. 더 빠른 방법은 반복되는 문자가 절대 포함되지 않는 두 위치 사이의 윈도우를 유지합니다. 오른쪽 끝을 한 번에 한 문자씩 이동하세요. 새 문자가 이미 윈도우 안에 있으면, 그 문자가 이전에 있었던 위치 바로 다음으로 왼쪽 끝을 이동하세요. 각 문자의 마지막 위치를 기억하면 이 이동을 즉시 할 수 있으므로 문자열을 한 번만 읽으면 됩니다.
문자열 s를 받아 중복 문자가 없는 가장 긴 부분 문자열(연속된 문자들의 구간)의 길이를 반환하는 lengthOfLongestSubstring이라는 함수를 작성하세요.
대문자와 소문자는 서로 다른 문자이므로, a와 A는 중복이 아닙니다.
제약 조건: 1 <= s.length <= 5 * 10^4. s에는 영문자(소문자와 대문자)와 숫자만 포함됩니다.
함수
- arg1string
- 반환값integer
예제
- 입력
- arg1 = "coddycode"
- 출력
- 5
- 입력
- arg1 = "racecar"
- 출력
- 4
- 입력
- arg1 = "a1b2a3b"
- 출력
- 5
제출 시 숨은 테스트 +12개
힌트
하나씩 열어 보세요. 열 때마다 조금 더 알려 줍니다.
부분 문자열은 문자열의 연속된 일부이므로, 같은 문자를 두 번 만나지 않고 포함할 수 있는 가장 긴 구간을 찾으면 됩니다.
왼쪽 끝과 오른쪽 끝이 있는 윈도우를 유지하세요. 오른쪽에서 한 번에 문자 하나씩 윈도우를 확장하고, 새 문자가 이미 윈도우 안에 있을 때만 왼쪽 끝을 이동하세요.
각 문자가 마지막으로 나타난 인덱스를 저장합니다. 새 문자가 마지막으로 나타난 위치가 왼쪽 경계와 같거나 그보다 오른쪽이면, 왼쪽 경계를 해당 인덱스의 바로 다음 위치로 이동합니다. 왼쪽 경계는 절대 뒤로 이동하지 않으며, 정답은 지금까지 가졌던 가장 넓은 윈도우입니다.
이 문제의 전체 풀이가 곧 추가됩니다.
비슷한 문제
같은 아이디어를 쓰는 문제입니다. 두세 개를 풀면 패턴이 몸에 익습니다.
Python
def lengthOfLongestSubstring(s):
# 여기에 코드를 작성하세요케이스 1
케이스 2
케이스 3
입력
arg1 = "coddycode"
기대값
5