public class Solution {
public String minWindow(String s, String t) {
int[] map = new int[128];
for (char c : t.toCharArray()) {
map[c]++;
}
int i = 0, j = 0, start = 0;
int count = t.length(), minLen = Integer.MAX_VALUE;
while (j < s.length()) {
if (map[s.charAt(j++)]-- > 0) count--;
while (count == 0) { // valid
if (j - i < minLen) {
minLen = j - i;
start = i;
}
if (map[s.charAt(i++)]++ == 0) count++;
}
}
return minLen == Integer.MAX_VALUE ? "" : s.substring(start, start + minLen);
}
}