无重复字符的最长子串
Longest Substring Without Repeating Characters
本机进度仅保存在当前浏览器
题目描述
给定一个字符串 s,请你找出其中不含有重复字符的最长子串的长度。
示例:s = "abcabcbb",最长子串是 "abc",输出 3;s = "bbbbb",输出 1。
解题思路
- 维护窗口 [l, r] 内字符均不重复:右移 r 时若字符已在窗口内,则移动 l 直到去掉旧的那个字符。
- 用哈希表记录每个字符最近出现的下标,可直接把 l 跳到「重复位置 + 1」,省去逐步收缩。
- 注意 l 只能前进不能后退,所以要与当前 l 取 max,防止窗口左界回跳。
- 每步更新答案为当前窗口长度 r - l + 1 的最大值。
参考实现
查看参考实现Python · 建议先自行作答
def lengthOfLongestSubstring(s):
# last 记录字符最近下标,l 为窗口左界
last = {}
l = best = 0
for r, ch in enumerate(s):
if ch in last and last[ch] >= l:
l = last[ch] + 1
last[ch] = r
best = max(best, r - l + 1)
return best