import java.util.*;
public class Solution {
/**
*
* @param S string字符串
* @param T string字符串
* @return string字符串
*/
public boolean isOk(Map<Character, Integer> map, Map<Character, Integer> set) {
for (Character character : set.keySet()) {
if (map.getOrDefault(character, 0) < set.get(character))return false;
}
return true;
}
public String minWindow (String S, String T) {
boolean flag = false;
// write code here
int lPoint = 0, rPoint = 0;
char[] newS = S.toCharArray();
char[] newT = T.toCharArray();
String ans = S;
Map<Character, Integer> map = new HashMap<>();
Map<Character, Integer> set = new HashMap<>();
for (char ch : newT) {
set.put(ch, set.getOrDefault(ch, 0) + 1);
}
while (rPoint < S.length()) {
map.put(newS[rPoint], map.getOrDefault(newS[rPoint], 0) + 1);
while (isOk(map, set)) {
flag = true;
if (ans.length() > (rPoint - lPoint + 1))ans = S.substring(lPoint, rPoint + 1);
map.put(newS[lPoint], map.get(newS[lPoint]) - 1);
lPoint++;
}
rPoint++;
}
if (flag)
return ans;
return "";
}
}