import java.util.*; public class Solution { /** * * @param S string字符串 * @param T string字符串 * @return string字符串 */ public String minWindow (String S, String T) { // write code here Map<Character,Integer> s_map = new HashMap<>(); Map<Character,Integer> t_map = new HashMap<>(); //T中的数据存入t_map for(int i = 0;i<T.length();i++){ t_map.put(T.charAt(i), t_map.containsKey(T.charAt(i)) ? t_map.get(T.charAt(i))+1 : 1 ); } int left = 0; int right = 0; int result_length = Integer.MAX_VALUE; String ans = ""; while(right < S.length()){ s_map.put(S.charAt(right), s_map.containsKey(S.charAt(right)) ? s_map.get(S.charAt(right)) +1 : 1 ); while(isCover(s_map,t_map)){ if(result_length > right - left +1){ result_length = right - left +1; ans = S.substring(left,right+1); } s_map.put(S.charAt(left), s_map.get(S.charAt(left)) - 1 ); if(s_map.get(S.charAt(left)) == 0){ s_map.remove(S.charAt(left)); } left++; } right++; } return ans; } public boolean isCover(Map<Character,Integer> s_map,Map<Character,Integer> t_map){ for(Character key : t_map.keySet()){ if(!s_map.containsKey(key)){ return false; }else if(s_map.get(key) < t_map.get(key)){ return false; } } return true; } }