3. Sliding Window

Sliding window

Template

public int slidingWindow(String s) {
    // ========= 模板:定义相关数据结构,初始化工作============
    HashMap<Character, Integer> windowMap = new HashMap<>();
  
    int left, right, res;
    left = right = res = 0;

    // ================== 模板:开始滑动窗口=====================
    while (right < s.length()) {

        // =========== 模板:向右滑动窗口,装填满足的字符到map中==========
        char c = s.charAt(right);
        right++;
        windowMap.put(c, windowMap.getOrDefault(c, 0) + 1);

        // =========== 根据题意:此时“有可能”出现满足条件的解 ==========
        // 判断左侧窗口是否要收缩
        while (window_map.get(c) > 1) {
            char d = s.charAt(left);
            left++;
            // 进行窗口内数据的一系列更新
            windowMap.put(d, windowMap.getOrDefault(d, 0) - 1);
        }
        // 在这里更新答案
        res = Math.max(res, right - left);
    }
    return res;
}

Typic problems

  • Find longest no repeated substring

  • Minimum coverage window substring

  • Find all Anagrams from a string of another string

Last updated