## ℹ️ 문제 정보
- 플랫폼: #leetcode
- 난이도: #medium
- 문제 링크: [Longest Substring Without Repeating Characters - LeetCode](https://leetcode.com/problems/longest-substring-without-repeating-characters)
## 📝 문제 요약
주어진 문자열에서 **중복되지 않는 가장 긴 부분 문자열(substring)**의 길이를 구하는 문제.
예: `"abcabcbb"` → 3 (`"abc"`)
## 💡 풀이 아이디어
- 슬라이딩 윈도우
- left와 right 두 포인터를 이동시키면서 중복 없는 부분 문자열을 찾는다.
- 중복 문자를 체크하기 위해서 set을 활용함.
## 🔑 코드
```typescript
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;
};
```
## ⚠️ 반성
> [!note]- 1트
> 중복 제거 시에 left를 한칸만 오른쪽으로 옮겨주고 다음 루프로 돌아가게 했다.
> 다음 루프에서 남아 있던 중복들이 알아서 없어질 줄 알았는데 아니었다.
## 🔁 복습 기록
- [ ] 2025-09-16 복습 하시오