LeetCode每日一题76. 最小覆盖子串(滑动窗口)

246 阅读1分钟

先找到最大的满足条件的窗口区间
再收缩区间。
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;
    }
}