1.  题目

2. 分析

这道题比较简单。
思想就是:双指针,left=right=0。从左到右遍历字符串,right递增,同时将遇到的字符放到set中。遍历的过程中,判断set中是否已经存在该字符了,如果存在,那么就递增left,直到遇到左指针与右指针所指位置的字符相等。相等时,将left加一。再递增right,这个过程中找到最大值即可。

3. 代码

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        left = right = 0
        res = 0
        appear = set()
        while(right < len(s)):
            if s[right] in appear:
                while(s[left] != s[right]):
                    appear.remove(s[left])
                    left += 1
                left += 1
            else:
                appear.add(s[right])
            res = max(res, right-left+1)
            right += 1
        return res
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.