已解答
中等
相关标签
相关企业
提示
给定一个字符串 s
,请你找出其中不含有重复字符的 最长子串的长度。
提示:
0 <= s.length <= 5 * 104
s
由英文字母、数字、符号和空格组成
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
dic, res, i = {}, 0, -1
for j in range(len(s)):
if s[j] in dic:
i = max(dic[s[j]], i) # 更新左指针 i
dic[s[j]] = j # 哈希表记录
res = max(res, j - i) # 更新结果
return res
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
ans = left = 0
window = set() # 维护从下标 left 到下标 right 的字符
for right, c in enumerate(s):
# 如果窗口内已经包含 c,那么再加入一个 c 会导致窗口内有重复元素
# 所以要在加入 c 之前,先移出窗口内的 c
while c in window: # 窗口内有 c
window.remove(s[left])
left += 1 # 缩小窗口
window.add(c) # 加入 c
ans = max(ans, right - left + 1) # 更新窗口长度最大值
return ans