给定一个字符串,找出最长子串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
}