2025年- H103-Lc211--3090. 每个字符最多出现两次的最长子字符串(双指针)--Java版
1.题目
2.代码实现
class Solution {public int maximumLengthSubstring(String s) {//存储字符和字符出现的频率Map<Character,Integer> m=new HashMap<>();int left=0;int maxlenth=0;int cnt=0;//子串说明是连续的,如果某个字符出现了3次,就直接从该字符的下一个字符寻找for(int right=0;right<s.length();right++){char c=s.charAt(right);// 将新进入窗口的字符计数加一m.put(c,m.getOrDefault(c,0)+1);while(m.get(c)>2){// 1. 获取滑动窗口最左边的字符char oldleft=s.charAt(left);// 将这个最左边字符的频率减一,因为它即将移出窗口m.put(oldleft,m.get(oldleft)-1);//3. 将 left 指针右移,完成窗口的收缩left++;}maxlenth=Math.max(maxlenth,right-left+1);}return maxlenth;}}