先找到最大的满足条件的窗口区间
再收缩区间。
public class Num76最小覆盖子串 {
public String minWindow(String s, String t) {
int[] hash = new int[128];
for (int i = 0; i < t.length(); i++) {
hash[t.charAt(i)]++;
}
int cnt = 0;
for (int i : hash) {
if (i > 0) cnt++;
}
String ans = "";
char[] arr = s.toCharArray();
for (int i = 0, j = 0, c = 0; i < arr.length; i++) {
if (hash[arr[i]] == 1) c++;
hash[arr[i]]--;
while (c == cnt && hash[arr[j]] < 0) {
hash[arr[j++]]++;
}
if (c == cnt) {
if (ans.length() == 0 || ans.length() > i - j + 1) {
ans = s.substring(j, i + 1);
}
}
}
return ans;
}
}