滑动串口模板 - Aminute/aminute GitHub Wiki
class Solution{
public String minWindow(String s, String t) {
HashMap<Character,Integer> dataT = new HashMap<>();
HashMap<Character,Integer> window = new HashMap<>();
for(char c : t.toCharArray()){
dataT.put(c,dataT.getOrDefault(c,0)+1);
}
int lent = t.length();
int left = 0;
int right = 0;
String res = "";
//窗口右边移动
while(right<s.length()){
if (dataT.containsKey(s.charAt(right))){
window.put(s.charAt(right),window.getOrDefault(s.charAt(right),0)+1);
if(window.get(s.charAt(right))<=dataT.get(s.charAt(right))){
lent--;
}
}
//窗口左边移动
while(lent==0){
if (res.length()>=t.length() && right-left+1<res.length()){
res = s.substring(left,right+1);
}
if (dataT.containsKey(s.charAt(left))){
window.put(s.charAt(left),window.getOrDefault(s.charAt(left),0)-1);
//为了解决 ABC匹配串AABBC的情况
if (window.get(s.charAt(left))<dataT.get(s.charAt(left))){
lent++;
}
}
left++;
}
right++;
}
return res;
}
}