首页 > 其他 > 详细

滑动窗口

时间:2021-01-10 23:46:22      阅读:43      评论:0      收藏:0      [点我收藏+]

最小覆盖子串

class Solution {
    public String minWindow(String s, String t) {
        int[] a = new int[128];
        for (char ch : t.toCharArray()) {
            a[ch]++;
        }
        int[] b = new int[128];
        int left = 0, right = 0, l = 0, min = s.length() + 1;
        char[] arr = s.toCharArray();
        int dis = 0; //窗口内与t相同的数量

        for (int i = 0; i < arr.length; i++) {
            if (a[arr[i]] > 0) {
                b[arr[i]]++;
                if (b[arr[i]] <= a[arr[i]]) { //如果大于就不算进去了。因为大于也满足。
                    dis++;
                }
            }
            if (dis == t.length()) {
                //左指针移动条件:arr[l]不在t内或者arr[l]在窗口内部的数量大于t中arr[l]的数量
                while (a[arr[l]] == 0 || b[arr[l]] > a[arr[l]]) { 
                    if (a[arr[l]] > 0) {
                        b[arr[l]]--;
                    }
                    l++;
                }
                if (i - l + 1 < min) {
                    left = l;
                    right = i;
                    min = i - l + 1;
                }
            }
        }

        return min == s.length() + 1 ? "" : s.substring(left, right + 1);
    }
}

 

滑动窗口

原文:https://www.cnblogs.com/CPJ31415/p/14260114.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!