3. Longest Substring Without Repeating Characters
2025-09-09
LeetCode 3번 풀이
이 글은 Obsidian에서 마이그레이션되었으며, 그 과정에서 AI의 도움을 받았습니다. 오류나 누락된 내용이 있다면 댓글로 알려주세요!
문제
Longest Substring Without Repeating Characters - LeetCode
풀이
아이디어
- 슬라이딩 윈도우
- left와 right 두 포인터를 이동시키면서 중복 없는 부분 문자열을 찾는다.
- 중복 문자를 체크하기 위해서 set을 활용함.
중복 제거 시에 left를 한칸만 오른쪽으로 옮겨주고 다음 루프로 돌아가게 했었는데, 다음 루프에서 남아 있던 중복들이 알아서 없어질 줄 알았는데 아니었다.
코드
function lengthOfLongestSubstring(s: string): number {
// 문자열의 문자가 1개 이하인 경우 해당 문자열이 최대 길이 substring
if (s.length <= 1) return s.length;
let maxLength = 1; // 최소 substring 길이는 문자 하나 길이인 1
const charSet = new Set()
let left = 0, right = left + 1;
charSet.add(s[left]);
while (left < right && right < s.length) {
// right의 문자가 charSet에 없을 때 까지 까지 left를 이동
while (charSet.has(s[right]) && left < right) {
charSet.delete(s[left]);
left++;
}
// substring 길이 업데이트하기
maxLength = Math.max(maxLength, right - left + 1);
// right를 오른쪽으로 한칸 옮기기
charSet.add(s[right]);
right++;
}
return maxLength;
};