双指针

class Solution:
    def lengthOfLongestSubstring(self , s: str) -> int:
            dic = {} #建立一个字典,用来对付重复元素
            i = -1 #左指针i,设成负一,如果后面一开始就是最长不重复子字符串的开始的话,直接减i就能求出长度
            res = 0
            for j in range(len(s)):
                if s[j] in dic: 
                    i = max(dic[s[j]],i) # 如果碰到重复了,就要更新左指针i,这里需要比大小是因为可能重复字符可能在i前面,这种情况i是不需要动的
                dic[s[j]] = j #右指针j不断更新
                res = max(res,j-i)
            return res