반복 없는 가장 긴 부분 문자열
윈도에서 마지막으로 본 위치를 추적합니다
반복 없는 가장 긴 부분 문자열은(는) CoddyKit의 무료 Competitive Programming Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Competitive Programming Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Competitive Programming Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
고전적인 윈도 문제
반복되는 문자가 없는 가장 긴 부분 문자열을 찾으십시오. 거의 모든 온라인 채점 시스템에서 등장하는 대표적인 슬라이딩 윈도 문제입니다. 🔤
완전 탐색의 함정
모든 부분 문자열에서 중복을 확인하면 비용이 약 O(n^2) 이상 듭니다. 긴 문자열에서는 너무 느리므로 더 똑똑한 탐색이 필요합니다.
서로 다른 문자의 윈도
항상 서로 다른 문자만 포함하는 윈도를 유지합니다. 오른쪽으로 확장하다가 반복 문자가 나타나면 그 문자가 사라질 때까지 왼쪽에서 줄입니다.
마지막 위치 기억하기
각 문자의 마지막 인덱스를 사전에 저장합니다. 이렇게 하면 탐색 중 반복 문자가 마지막으로 나타난 위치를 즉시 알 수 있습니다.
last = {}
left = 0
best = 0각 문자 탐색하기
문자열을 오른쪽으로 반복하며 각 단계에서 인덱스와 해당 위치의 문자를 함께 읽습니다. 이렇게 윈도를 한 번에 한 위치씩 앞으로 이동합니다.
for right, ch in enumerate(s):왼쪽 포인터 건너뛰기
해당 문자가 현재 윈도 안에서 이미 나타났다면 왼쪽을 그 문자의 마지막 위치 바로 다음으로 이동합니다. 한 번의 이동으로 중복을 제거할 수 있습니다.
if ch in last and last[ch] >= left:
left = last[ch] + 1갱신하고 측정하기
이 문자의 새 위치를 기록하면 왼쪽부터 오른쪽까지의 윈도에 중복이 없어집니다. 길이는 오른쪽에서 왼쪽을 뺀 값에 1을 더한 값입니다.
last[ch] = right
best = max(best, right - left + 1)이 검사가 중요한 이유
last[ch] >= left 검사는 필수입니다. 이 검사가 없으면 윈도 밖에 있는 오래된 위치 때문에 왼쪽이 잘못해서 뒤로 이동하게 됩니다.
선형 시간, 선형 공간
각 문자를 한 번씩만 방문하고 왼쪽은 앞으로만 이동하므로 탐색은 O(n)입니다. 사전은 서로 다른 문자들을 저장할 공간을 사용합니다.
처리해야 할 경계 사례
빈 문자열의 답은 0이고, 같은 문자가 하나만 반복되는 문자열의 답은 1입니다. 제출하기 전에 두 경우를 모두 확인하여 뜻밖의 WA를 피하십시오.
재사용 가능한 패턴
마지막으로 본 위치를 저장하는 맵과 왼쪽 포인터를 건너뛰는 방식은 중복 없음을 다루는 여러 문제로 일반화할 수 있습니다. 예를 들어 반복이 최대 한 번인 윈도에 적용할 수 있습니다.
빠른 확인
가장 긴 중복 없는 부분 문자열을 찾기 위해 탐색하면서 각 문자의 마지막 인덱스를 추적합니다.
정리
서로 다른 문자로 이루어진 윈도를 이동하고, 각 문자의 마지막 위치를 저장한 다음 반복 문자를 지나 왼쪽을 건너뛰십시오. 이 고전적인 문제를 O(n)에 해결할 수 있습니다. ✅
자주 묻는 질문
“반복 없는 가장 긴 부분 문자열” 강의는 무료인가요?
네 — “반복 없는 가장 긴 부분 문자열” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Competitive Programming Academy 강의 전체를 잠금 해제할 수 있습니다. Competitive Programming Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“반복 없는 가장 긴 부분 문자열”에서 뭘 배우나요?
윈도에서 마지막으로 본 위치를 추적합니다 브라우저에서 직접 실행하는 실습 코드로 Competitive Programming Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Competitive Programming Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Competitive Programming Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“반복 없는 가장 긴 부분 문자열” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Competitive Programming Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Competitive Programming Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 고정 크기 윈도 합
- 투 포인터를 이용한 가변 윈도
- 반복 없는 가장 긴 부분 문자열
- 규칙을 만족하는 윈도 개수 세기