滑动窗口-之多包含两个不同字符的最长子串

94 阅读1分钟

159. 至多包含两个不同字符的最长子串

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

 

示例 1:

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

示例 2:

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

 

提示:

  • 1 <= s.length <= 105
  • s 由英文字母组成
/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstringTwoDistinct = function(s) {
	const k = 2;
	const map = new Map();
	let result = 0;
	for (let left = 0, right = 0; right < s.length; right++) {
		while(map.size > k) {
			if (map.get(s[left]) === 1) {
				map.delete(s[left]);
			} else {
				map.set(s[left], map.get(s[left]) - 1);
			}
			left++;
		}
		if (map.has(s[right])) {
			map.set(s[right], map.get(s[right]) + 1)
		} else {
			map.set(s[right], 1);
		}
		if (map.size <= k) {
		    result = Math.max(result, right - left + 1);
		}
	}

	return result;
};