public static String minWindow(String S, String T) {
		int[]ct=new int[256], cs=new int[256], rec=new int[2];
		for (int i=0;i<T.length();++i)
			++ct[T.charAt(i)];
		int c=0, ml=Integer.MAX_VALUE;
		for (int l=0,r=0,n=S.length();r<n;++r) {
			char cc=S.charAt(r);
			++cs[cc];
			if (c<T.length()) {
				if (cs[cc]<=ct[cc])
					++c;
			} 
			if (c==T.length()) {
				for (cc=S.charAt(l);l<=r;cc=S.charAt(++l)) {
					if (cs[cc]>ct[cc])
						--cs[cc];
					else break;
				}
				if (ml>r-l) {
					ml=r-l;
					rec[0]=l;
					rec[1]=r+1;
				}
			}			
		}
		return S.substring(rec[0],rec[1]);
	}