classSolution:deflengthOfLongestSubstring(self, s:str)->int:# 哈希集合,记录每个字符是否出现过
occ =set()
n =len(s)# 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动
rk, ans =-1,0for i inrange(n):if i !=0:# 左指针向右移动一格,移除一个字符
occ.remove(s[i -1])while rk +1< n and s[rk +1]notin occ:# 不断地移动右指针
occ.add(s[rk +1])
rk +=1# 第 i 到 rk 个字符是一个极长的无重复字符子串
ans =max(ans, rk - i +1)return ans
classSolution:deflengthOfLongestSubstring(self, s:str)->int:
k, res, c_dict =-1,0,{}for i, c inenumerate(s):if c in c_dict and c_dict[c]> k:# 字符c在字典中 且 上次出现的下标大于当前长度的起始下标
k = c_dict[c]
c_dict[c]= i
else:
c_dict[c]= i
res =max(res, i-k)return res