import java.util.*;
public class Solution {
/**
*
* @param S string字符串
* @param T string字符串
* @return string字符串
*/
public String minWindow (String S, String T) {
if (S.equals(T)) return S;
if (S.length() < T.length()) return "";
//滑动窗口
HashMap<Character, Integer> hashMap = new HashMap<>();
HashMap<Character, Integer> windows = new HashMap<>();
char[] SC = S.toCharArray();
char[] ST = T.toCharArray();
//将T放入哈希表中
for (int i = 0; i < ST.length; i++) {
hashMap.put(ST[i], hashMap.getOrDefault(ST[i], 0) + 1);
}
int min = Integer.MAX_VALUE;
int start = 0;
for (int i = 0; i < SC.length; i++) {
if (hashMap.containsKey(SC[i])) {
int left = i;
while (left <= SC.length) {
if (windows.equals(hashMap)) {
if (min > left - i) {
min = left - i;
start = i;
}
break;
}
if (left==SC.length) break;
if (hashMap.containsKey(SC[left])) {
int w = windows.getOrDefault(SC[left], 0);
int h = hashMap.get(SC[left]);
if (w != h) windows.put(SC[left], windows.getOrDefault(SC[left], 0) + 1);
}
left++;
}
windows.clear();
}
}
return min == Integer.MAX_VALUE ? "" : S.substring(start, min + start);
}
}