题目
给定字符串s,找最多包含两个不同字符的子串,且需要子串最长
类似 3. 无重复字符的最长子串
https://blog.csdn.net/weixin_51125132/article/details/117925266
思路
使用map记录char以及其对应的位置
使用Collections.min(map.values()) 去找到最靠前的一个位置,然后通过s.charAt()找到这个位置上对应的字母,这就是key
代码
class Solution {
public int lengthOfLongestSubstringTwoDistinct(String s) {
int ans = 0;
int len = s.length();
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
for (int start = 0, end = 0; end < len; end ++){
char cur = s.charAt(end);
map.put(cur, end);//新的会被添加,旧的key会被挤掉
if (map.size() > 2){
int minIndex = Collections.min(map.values());//找到第一个索引
start = map.get(s.charAt(minIndex)) + 1; //挪动start
map.remove(s.charAt(minIndex)); //记得这个时候必须把不在map里面key-value的删掉
}
ans = Math.max(ans, end - start + 1);
}
return ans;
}
}