解题思路:滑动窗口
- 使用hash表存储重复字符的位置key-value
- 不断移动end指针,判断当前字符是否存在于hash表
- 如果存在,将start指针移动至重复位置+1
- 更新当前字符最新位置为end指针位置
- max_len = max(max_len,end - start+1)
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
if len(s) <=1:
return len(s)
left,max_len =0,0
hashtable ={}
for right in range(len(s)):
// 当前字符
curr = s[right]
// 当前字符是否已存在重复
if curr in hashtable:
// 判断当前重复字符的位置 在初始位置的后面 如果是,则更新起始位置
// 如果不是 则新初始位置不变
if hashtable[curr] +1 >=left:
left =hashtable[curr]+1
hashtable[curr] = right
max_len = max(max_len,right-left+1)
return max_len