public class Solution {
public String minWindow(String s, String t) {
if(s == null || s.length() < t.length() || s.length() == 0){
return "";
}
HashMap<Character,Integer> map = new HashMap<Character,Integer>();
//把target的字母存到map
for(char c : t.toCharArray()){
if(map.containsKey(c)){
map.put(c,map.get(c)+1);
}else{
map.put(c,1);
}
}
int left = 0;
int minLeft = 0;
int minLen = s.length()+1;
int count = 0;
for(int right = 0; right < s.length(); right++){
//如果map中包括了s的字母,就逐个减去
if(map.containsKey(s.charAt(right))){
map.put(s.charAt(right),map.get(s.charAt(right))-1);
//同时用count统计相同字母的个数
if(map.get(s.charAt(right)) >= 0){
count ++;
}
//count凑够了t
while(count == t.length()){
//greedy更新结果字符串的长度
if(right-left+1 < minLen){
minLeft = left;
minLen = right-left+1;
}
//s的left如果已经出现了,就count减去它,同时更新left
if(map.containsKey(s.charAt(left))){
map.put(s.charAt(left),map.get(s.charAt(left))+1);
if(map.get(s.charAt(left)) > 0){
count --;
}
}
left ++ ;
}
}
}
if(minLen>s.length())
{
return "";
}
return s.substring(minLeft,minLeft+minLen);
}
}