滑动窗口

142 阅读1分钟

思路

维护一个窗口,不断滑动,最后更新答案。

思路比较简单,但是细节很多。比如如何向窗口内添加新的元素,如何缩小窗口,在窗口滑动的哪个阶段更新结果等等。

框架代码

public void slidingWindow(String s, String t) {
    HashMap<Character, Integer> window = new HashMap<>();
    HashMap<Character, Integer> need = new HashMap<>();
    for (char c : t)
        need.put(c, window.getOrDefault(c, 0) + 1);
    
    int left = 0, right = 0;
    int res = 0;
    while (right < s.length()) {
        // c是将移入窗口的字符
        char c = s.charAt(right);
        //增大窗口
        right++;
        //进行窗口内数据的一系列更新
        ···
        
        //判断左侧窗口是否收缩
        while (window needs shrink) {
            //d是将移出窗口的字符
            char d = s.charAt(left);
            //缩小窗口
            left++;
            //进行窗口内数据的一系列更新
            ···
        }
    }
}