天机阁

LintCode928. 最多有两个不同字符的最长子串

2022-08-16 · 1 min read
LeetCode

题目

给定一个字符串,找出最长子串TT的长度,它最多包含2个不同的字符。

难度:🌟🌟🌟

样例 1

输入: “eceba”
输出: 3
解释:
T 是 "ece" 它的长度是 3.

样例 2

输入: “aaa”
输出: 3

题解

使用滑动窗口方法,用 map 记录窗口中的字符和出现的次数,当窗口中超过2个字符,则删除一个,维持窗口中存在两个以内字符。

代码实现

func LengthOfLongestSubstringTwoDistinct(s string) int {
    window := make(map[byte]int)
    left, right := 0, 0
    var res int
    for right < len(s) {
        c := s[right]
        right++
        window[c]++
        for len(window) > 2 {
            d := s[left]
            left++
            window[d]--
            if window[d] == 0 {
                delete(window, d)
            }
        }
        res = max(right - left, res)
    }
    return res
}

func max(x, y int) int {
    if x > y {
        return x
    }
    return y
}