本部落格基於大佬的題解
滑動視窗是一種高階的雙指標演算法,一般用於字串匹配問題:
最小覆蓋子串
找到字串中所有字母異位詞
無重複字元的最長子串
字串的排列
滑動窗的基本思路就是維護乙個視窗,不斷滑動。該演算法的大致邏輯如下:
int left =
0, right =0;
while
(right < s.
size()
)}
演算法複雜度是o(n
)o(n)
o(n)
比暴力解要高效很多。可以看到演算法是維護乙個視窗,最關鍵的點就是何時使右邊界向右移動使得視窗擴張和何時使左邊界向右移動使得視窗收縮。
1.最小覆蓋子串
string minwindow
(string s, string t)
// 判斷左側視窗是否要收縮
while
(valid == need.
size()
)// d 是將移出視窗的字元
char d = s[left]
;// 左移視窗
left++
;// 進行視窗內資料的一系列更新
if(need.
count
(d))}}
// 返回最小覆蓋子串
return len == int_max ?
"": s.
substr
(start, len)
;}
2. 找到字串中所有字母異位詞vector<
int>
findanagrams
(string s, string t)
// 判斷左側視窗是否要收縮
while
(right - left >= t.
size()
)}}return res;
}
滑動視窗總結
滑動視窗思想 視窗由兩個指標構成,乙個左指標left,乙個右指標right,然後 left,right 表示的索引範圍是乙個視窗了。右指標right的功能是用來擴充套件視窗 當視窗內的條件沒有達到題目要求時,我們需要不斷移動右指標right直到視窗內的條件第一次滿足題目要求為止。左指標left的功能...
滑動視窗總結
乙個序列中,滿足某些條件的,子串的,最長 最短 個數。時間複雜度分析 暴力解法的時間複雜度一般為o n 3 o n 2 列舉所有的子串,o n 判斷是否滿足條件。滑動視窗在兩個方面都降低時間複雜度 首先並不列舉所有的子串,只列舉可能包含答案的那些。其次通過記錄視窗內子串的一些資訊,使得判斷是否滿足條...
滑動視窗總結
1.我們使用雙指標的思路,初始定義兩個指標,left right 0,把索引閉區間 left,right 看作乙個滑動視窗 2.然後不斷增加right的值,直到視窗中的字串符合要求 3.然後,停止增加right的值,轉而增加left的值,直到視窗中的字串不符合要求,每次增加left,就要更新一輪結果...