题型总结之Sliding Window

Sliding Window模板

int[]map = new int[256];  
int start = 0, i = 0;  // [start...i]维护一个滑动窗口
int count = 0;  //用count来track当前的滑动窗口是否valid
int result = 0;

while( i < s.length()){
    char c1= s.charAt(i);
    if(map[c1] >0) count++;  // 随题意变化。
    map[c1]++;
    i++;
    
    while(count > 0){  // 随题意变化。一旦count检测到当前滑动窗口invalid,要move指针start直至找到下一个valid sliding window
        char c2 = s.charAt(start);
        if(map[c2] > 1) count --;  // 随题意变化。
        map[c2] --;
        start ++;   
    }
    result = Math.max(result,  i - start);
}   

 

Sliding Window高频题:

[leetcode]76. Minimum Window Substring最小字符串窗口

[leetcode]3. Longest Substring Without Repeating Characters无重复字母的最长子串

[leetcode]159. Longest Substring with At Most Two Distinct Characters至多包含两种字符的最长子串

[leetcode]340. Longest Substring with At Most K Distinct Characters至多包含K种字符的最长子串

 

上一篇:Sliding Window - 题解【单调队列】


下一篇:[leetcode] 239. Sliding Window Maximum