目录

0159:至多包含两个不同字符的最长子串(★)

力扣第 159 题

题目

给你一个字符串 s ,请你找出 至多 包含 两个不同字符 的最长子串,并返回该子串的长度。

示例 1:

输入:s = "eceba"
输出:3
解释:满足题目要求的子串是 "ece" ,长度为 3 。

示例 2:

输入:s = "ccaabbb"
输出:5
解释:满足题目要求的子串是 "aabbb" ,长度为 5 。

提示:

  • 1 <= s.length <= 105
  • s 由英文字母组成

分析

典型的滑动窗口问题,维护至多 2 个不同字符的窗口,找最大窗口即可。

解答

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def lengthOfLongestSubstringTwoDistinct(self, s: str) -> int:
    res, d, i = 0, defaultdict(int), 0
    for j, c in enumerate(s):
        d[c] += 1
        while len(d)>2:
            d[s[i]]-=1
            if d[s[i]] == 0:
                del d[s[i]]
            i += 1
        res = max(res, j-i+1)
    return res

352 ms