滑动串口模板 - 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;
    }
}