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