Problem: 3. 无重复字符的最长子串


文章目录

  • 思路
  • 解题方法
  • 复杂度
  • Code


思路

不定长滑动窗口

解题方法

  1. 定义两个指针l = 0, r = 0
  2. 使用哈希表dic记录窗口中元素的个数,r往前移动,当r指针指向的元素个数>1的时候,则移动l指针,r指针指向的元素个数不>1

复杂度

时间复杂度: 3. 无重复字符的最长子串_复杂度

空间复杂度: 3. 无重复字符的最长子串_复杂度

Code

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        l = 0
        r = 0
        dic = {}

        ans = 0

        while r < len(s):
            if s[r] not in dic:
                dic[s[r]] = 1
            else:
                dic[s[r]] += 1
            
            while dic[s[r]] > 1:
                dic[s[l]] -= 1
                l += 1
            
            ans = max(ans, r - l + 1)
            r += 1
        return ans