Sliding Window Template
模板
void slidingWindow(const string& s) |
核心概念
- 先透過擴大窗口來找到一個「可行解」
- 然後透過縮小窗口來優化這個「可行解」,進而找到最優解
Tip
- 區間為左閉右開
[left, right)
, 因為若為左閉右閉, 則window
中初始會有一個元素(這不符合我們定義的初始window
為空), 故應為左閉右開。
應注意的部分
- 何時移動
right
擴大窗口?窗口加入元素時,應該更新哪些變數? - 窗口何時暫停擴大,開始移動
left
縮小窗口?從窗口移出元素時,應該更新哪些變數? - 結果應該在擴大窗口還是縮小窗口的時候進行更新?
經典例題
一般
- 76. Minimum Window Substring
- 567. Permutation in String
- 3. Longest Substring Without Repeating Characters
- 438. Find All Anagrams in a String
- 424. Longest Repeating Character Replacement
- 239. Sliding Window Maximum
- 209. Minimum Size Subarray Sum
- 904. Fruit Into Baskets
進階(不會也沒差)
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論