滑動視窗法——子串相關問題

狠狠赚一笔發表於2024-07-28

滑動視窗演算法框架

567 m判斷s中是否包含t的字母異位子串/438 m找到s中所有的t的字母異位子串/76 h找到s中包含t所有字母的最小子串/3 m找到s中無重複字元最小子串

void slidingWindow(string s, string t) {
    Map<Character, Integer> need = new HashMap<>();
    Map<Character, Integer> window= new HashMap<>();
    for (char c : t.toCharArray()) need.put(c,need.getOrDefault(c,0)+1);
    
    int left = 0, right = 0;
    int valid = 0; 
    while (right < s.length()) {
        // c 是將移入視窗的字元
        char c = s.charrAt(right);
        // 右移視窗
        right++;
        // 進行視窗內資料的一系列更新
        ...

        /*** debug 輸出的位置 ***/

        
        // 判斷左側視窗是否要收縮
        while (window needs shrink) {
            // d 是將移出視窗的字元
            char d = s.charAt(left);
            // 左移視窗
            left++;
            // 進行視窗內資料的一系列更新
            ...
        }
    }
}

參考labuladong給出的框架

相關文章