class Solution {
public int lengthOfLongestSubstringTwoDistinct(String s) {
// 记录窗口内的内容
HashMap<Character, Integer> map2 = new HashMap<>();
int maxLen = -1;
int start = 0;
for (int end = 0; end < s.length(); end++) {
map2.put(s.charAt(end), map2.getOrDefault(s.charAt(end), 0) + 1);
// 窗口左端点收缩条件:当窗口内包含3种字符时
while (map2.size() == 3) {
// 更新map2
map2.put(s.charAt(start), map2.get(s.charAt(start)) - 1);
// 当字符数量为0时清除该key
if (map2.get(s.charAt(start)).equals(0)) {
map2.remove(s.charAt(start));
}
start++;
}
maxLen = Math.max(maxLen, end - start + 1);
}
return maxLen != -1 ? maxLen : 0;
}
}
LeetCode 159. 至多包含两个不同字符的最长子串 (滑动窗口&哈希表)
最新推荐文章于 2023-06-05 20:19:46 发布