1.我們使用雙指標的思路,初始定義兩個指標,left=right=0,把索引閉區間[left,right]看作乙個滑動視窗
2.然後不斷增加right的值,直到視窗中的字串符合要求
3.然後,停止增加right的值,轉而增加left的值,直到視窗中的字串不符合要求,每次增加left,就要更新一輪結果。
4.不斷重複2,3步驟,直到遍歷完整個字串
通俗來講,第2步是為了找到可行解,然後第三步是為了「優化可行解」。
滑動視窗的視窗大小可能固定,也可能不固定。
視窗大小固定**模板:
// 固定視窗大小為 k
string s;
// 在 s 中尋找視窗大小為 k 時的所包含最大母音字母個數
int right = 0;
while(right < s.size())
}return res;
視窗大小不固定**模板:
string s, t;
// 在 s 中尋找 t 的「最小覆蓋子串」
int left = 0, right = 0;
string res = s;
while(right < s.size())
}return res;
例題:
無重複字元的最長子串(
給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。
class solution
else
if(cnt == count) ans.push_back(left);}}
}return ans;
}};
滑動視窗總結
滑動視窗思想 視窗由兩個指標構成,乙個左指標left,乙個右指標right,然後 left,right 表示的索引範圍是乙個視窗了。右指標right的功能是用來擴充套件視窗 當視窗內的條件沒有達到題目要求時,我們需要不斷移動右指標right直到視窗內的條件第一次滿足題目要求為止。左指標left的功能...
滑動視窗總結
乙個序列中,滿足某些條件的,子串的,最長 最短 個數。時間複雜度分析 暴力解法的時間複雜度一般為o n 3 o n 2 列舉所有的子串,o n 判斷是否滿足條件。滑動視窗在兩個方面都降低時間複雜度 首先並不列舉所有的子串,只列舉可能包含答案的那些。其次通過記錄視窗內子串的一些資訊,使得判斷是否滿足條...
滑動視窗總結
本部落格基於大佬的題解 滑動視窗是一種高階的雙指標演算法,一般用於字串匹配問題 最小覆蓋子串 找到字串中所有字母異位詞 無重複字元的最長子串 字串的排列 滑動窗的基本思路就是維護乙個視窗,不斷滑動。該演算法的大致邏輯如下 int left 0,right 0 while right s.size 演...