**:
最典型的滑動視窗題目
right要找到新字元,才加1,擴大視窗
left要發現舊字元就加1,縮小視窗,直到right處的flag[s[right]]值變為0,right才繼續增加
需要注意的就是right++;的位置,需要考慮清楚
#define max(x,y) (x)>(y)?(x):(y)
int lengthoflongestsubstring(char * s);
while(right與上一題76. 最小覆蓋子串 的區別在下面這兩句,因為要找長度完全符合只是順序不同的字串。
while (match == needlen)
/*** note: the returned array must be malloced, assume caller calls free().
*/int* findanagrams(char * s, char * p, int* returnsize);
int window[200] = ;
int needlen = 0, minlen = int_max;
int* res = malloc(1000000);
for (int i = 0; i < strlen(p); i++)
int match = 0,k=0;
int right = 0, left = 0;
while (right < strlen(s))
} right++;
while (match == needlen)
char c2 = s[left];
if (need[c2])
}left++;
} }*returnsize = k;
return res;
}
最後總結
通過上面三道題,我們可以總結出滑動視窗演算法的抽象思想:
int left = 0, right = 0;
while (right < s.size())
}
滑動視窗相關的題目總結
關於滑動視窗的題目,大概有兩類,一類是 子串 問題 一類是 用單調佇列來解決 的問題 一 子串問題 labuladong大佬在這裡總結了滑動視窗這類問題的 框架,很實用。二 用單調佇列來解決 的問題 加入單調佇列 q.push value 加入佇列 intpop front int ans q.fr...
滑動視窗型別題目
3.無重複字元的最長子串 給定乙個字串,請你找出其中不含有重複字元的最長子串的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是1.滑動視窗本質是控制左右指標怎麼移動這裡有指標是一直往前走的,那麼左指標呢,當當前右指標指向的元素重複時左指標直接跳到這個已重複元素的下乙...
滑動視窗總結
滑動視窗思想 視窗由兩個指標構成,乙個左指標left,乙個右指標right,然後 left,right 表示的索引範圍是乙個視窗了。右指標right的功能是用來擴充套件視窗 當視窗內的條件沒有達到題目要求時,我們需要不斷移動右指標right直到視窗內的條件第一次滿足題目要求為止。左指標left的功能...