3. 无重复字符的最长子串
题目
3. 无重复字符的最长子串(中等)
给定一个字符串 s ,请你找出其中不含有重复字符的
最长 子串 的长度。
示例 1:
输入:
abcabcbb输出:
3解释:因为无重复字符的最长子串是
"abc",所以其长度为 3。注意 “bca” 和 “cab”
也是正确答案。
示例 2:
输入:
bbbbb输出:
1解释:因为无重复字符的最长子串是
"b",所以其长度为 1。
示例 3:
输入:
pwwkew输出:
3解释:因为无重复字符的最长子串是
"wke",所以其长度为 3。请注意,你的答案必须是
子串 的长度,"pwke"
是一个_子序列_,不是子串。
提示:
0 <= s.length <= 10^5s由英文字母、数字、符号和空格组成
思路
滑动窗口 + 哈希集合:右端不断扩张,一旦 s[r]
已在窗口集合中,就从左端逐个删字符收缩,直到重复消除;每轮用窗口大小
r - l + 1
更新答案,左右指针各至多走一遍,。
也可用
dict记录每个字符最后出现的下标,左端直接跳到「上次出现位置 + 1」,省去逐步收缩。
代码
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
ans = 0
pre = set()
l = 0
for r in range(len(s)):
while s[r] in pre:
pre.remove(s[l])
l += 1
ans = max(ans, r - l + 1)
pre.add(s[r])
return ans3. 无重复字符的最长子串
https://mingsm17518.github.io/2026/09/25/刷题笔记/Hot100/双指针/3. 无重复字符的最长子串/