# 解法1classSolution:deflengthOfLongestSubstring(self, s:str)->int:# hash集合,记录字符是否出现过
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
ans =max(ans, rk - i +1)return ans
# 解法2classSolution:deflengthOfLongestSubstring(self, s:str)->int:
k, res, c_dict =-1,0,{}for i, c inenumerate(s):# 字符c在字典中 且 上次出现的下标大于当前长度的起始下标if c in c_dict and c_dict[c]> k:
k = c_dict[c]# 获取之前的下标
c_dict[c]= i # 同时进行更新下标值else:
c_dict[c]= i
res =max(res, i - k)return res