根据题意可采用双指针的解法(滑动窗口),用 dict 做字符计数器, 遍历字符,当字符不在 dict 中时, 右移右指针,否则, 右移左指针并判断 dict 的值是否改变,直至结束 代码如下:

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param s string字符串 
# @return int整型
#
from collections import defaultdict
class Solution:
    def lengthOfLongestSubstring(self , s: str) -> int:
        # write code here
        count = defaultdict(int)
        l, r, n = 0, 0, len(s)
        max_l = 0
        while l < n:
            while r < n and s[r] not in count:
                count[s[r]] += 1
                r += 1
            if r - l > max_l:
                max_l = r - l
            count[s[l]] -= 1
            if count[s[l]] == 0:
                del count[s[l]]
            l += 1
        return max_l

双指针(滑动窗口)写法:

l, r, n = 0, 0, len
while l < n:
  whle r < n and [阈值条件变化]
      [阈值条件变化]
      r += 1
  [左右指针长度计算]
  [阈值条件变化]
  l += 1