mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 21:22:43 +00:00
67 lines
1.8 KiB
Plaintext
67 lines
1.8 KiB
Plaintext
---
|
|
title: '3. Longest Substring Without Repeating Characters'
|
|
description: Given a string s, find the length of the longest substring without duplicate characters
|
|
icon: dot
|
|
topics:
|
|
- { name: "Hash Table", slug: "hash-table" }
|
|
- { name: "String", slug: "string" }
|
|
- { name: "Sliding Window", slug: "sliding-window" }
|
|
video: "wiGpQwVHdE0"
|
|
sidebar:
|
|
label: 'Longest Substring Without Repeating Characters'
|
|
badge: 'Medium'
|
|
---
|
|
|
|
### Example 1:
|
|
- Input: `s = "abcabcbb"`
|
|
- Output: `3`
|
|
- Explanation: The answer is "abc", with the length of `3`. Note that "bca" and "cab" are also correct answers.
|
|
|
|
### Example 2:
|
|
- Input: `s = "bbbbb"`
|
|
- Output: `1`
|
|
- Explanation: The answer is "b", with the length of `1`.
|
|
|
|
### Example 3:
|
|
- Input: `s = "pwwkew"`
|
|
- Output: `3`
|
|
- Explanation: The answer is "wke", with the length of `3`. Notice that the answer must be a substring, "pwke" is a subsequence and not a substring.
|
|
|
|
### Constraints:
|
|
|
|
- `0 <= s.length <= 10^5`
|
|
- `s` consists of English letters, digits, symbols and spaces.
|
|
|
|
## Approach
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
S(["lengthOfLongestSubstring(s)"]) --> I["left = 0, ans = 0, window = set()"]
|
|
I --> L{"more (right, c) in s?"}
|
|
L -- no --> E(["return ans"])
|
|
L -- yes --> W{"c already in window?"}
|
|
W -- yes --> P["window.remove(s[left]); left += 1 — shrink until c is free"]
|
|
P --> W
|
|
W -- no --> A["window.add(c)"]
|
|
A --> M["ans = max(ans, right - left + 1)"]
|
|
M --> L
|
|
```
|
|
|
|
## Solution
|
|
|
|
```py
|
|
class Solution:
|
|
def lengthOfLongestSubstring(self, s: str) -> int:
|
|
left = 0
|
|
ans = 0
|
|
window = set()
|
|
for right, c in enumerate(s):
|
|
while c in window:
|
|
window.remove(s[left])
|
|
left += 1
|
|
window.add(c)
|
|
ans = max(ans, right - left + 1)
|
|
|
|
return ans
|
|
```
|