class Solution {
public String minWindow(String s, String t) {
if(t.length()> s.length()) return "";
HashMap<Character, Integer> map = new HashMap<>();
for(char c: t.toCharArray())
map.put(c, map.getOrDefault(c, 0) + 1);
int counter = map.size(); // 目标字符串中的不同字符种类
int begin = 0, end = 0; // 窗口起始、结束点
int len = Integer.MAX_VALUE;
int head = 0;
while(end < s.length()) {
char c = s.charAt(end);
if( map.containsKey(c) ) {
map.put(c, map.get(c) - 1);
if(map.get(c) == 0)
counter--;
}
end++;
while(counter == 0) { // 此时 Map 的 value 全部 <= 0
char tmpc = s.charAt(begin);
if( map.containsKey(tmpc) ) {
map.put(tmpc, map.get(tmpc) + 1);
if(map.get(tmpc) > 0)
counter++;
}
//----------
if(end - begin < len) {
len = end - begin;
head = begin;
}
//----------
begin++;
}
}
if(len == Integer.MAX_VALUE )
return "";
return s.substring(head, head+len);
}
}