leetcode hot 100/76
public String minWindow(String s, String t) {
if(s==null||t==null||s.length()==0||t.length()==0) return "";
int l =0,r =0;
int[] need = new int[128];//ascii一共有128个字符
int count = t.length(); //记录总共要找的字符个数
int size = Integer.MAX_VALUE;
int start = 0;
for(int i=0;i<t.length();i++){ //将每个要找的字符进行标记
need[t.charAt(i)]++;
}
while(r<s.length()){
if(need[s.charAt(r)]>0){ //如果该字符是要找的
count--;
}
need[s.charAt(r)]--; //每个都标记,除去需要的字母,同时辨别出不需要的字母(小于0),找到右端的最小值
if(count==0){
while(l<r&&need[s.charAt(l)]<0){ //剔除不需要的字母找到左端的最大值
need[s.charAt(l)]++;
l++;
}
if((r-l+1)<size){
size = r-l+1;
start = l;
}
need[s.charAt(l)]++;
count++;
l++;
}
r++;
}
return s.substring(start,start+size);
}