滑动窗口+哈希表
哈希表 seen 统计: 指针 j遍历字符 s,哈希表统计字符 s[j]最后一次出现的索引 。
更新左指针 i : 根据上轮左指针 i 和 seen[s[j]],每轮更新左边界 i ,保证区间 [i+1,j] 内无重复字符且最大。
更新结果 res : 取上轮 res和本轮双指针区间 [i+1,j] 的宽度(即 j−i )中的最大值。
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
seen=dict()
#存值
res=0
i=-1
for j in range(len(s)):
if s[j] in seen:
#更新左指针
i=max(seen[s[j]],i)
#哈希表记录
seen[s[j]]=j
res=max(res,j-i)
return res