不要用hashmap
public class Solution {
public String minWindow(String S, String T) {
// 讲解http://articles.leetcode.com/2010/11/finding-minimum-window-in-s-which.html
//代码 http://www.cnblogs.com/huntfor/p/3915288.html
String res = "";
if(S==null || T==null) return "";
int[] found= new int[256];
int[] needfind = new int[256];
int minLen = S.length()+1;
for(int i=0;i<T.length();i++){
needfind[T.charAt(i)]++;
}
int left = 0, cnt =0;
for(int i=0;i<S.length(); i++){ // i is right end
if(needfind[S.charAt(i)]==0) continue; // skip
found[S.charAt(i)]++;
if(found[S.charAt(i)] <= needfind[S.charAt(i)])
cnt++;
// while restraint reachs
if(cnt==T.length()){
while(left<S.length() &&(needfind[S.charAt(left)] ==0 || found[S.charAt(left)] >needfind[S.charAt(left)]) ){
if(found[S.charAt(left)] >needfind[S.charAt(left)])
found[S.charAt(left)]--;
left++;
}
int winlen = i-left+1;
if(winlen<minLen){
minLen = winlen;
res = S.substring(left, i+1);
}
}
}
return res;
}
}