滑動視窗演算法框架及相關例題

2021-10-07 16:15:37 字數 1531 閱讀 4490

滑動視窗演算法框架:移動右側視窗,進行視窗內資料的一系列更新;判斷左側視窗是否需要收縮,再左移視窗,進行視窗內資料的一系列更新。

/* 滑動視窗演算法框架 */

void slidingwindow(string s, string t)

}}

其中兩處...表示的更新視窗資料的地方,根據題目直接往裡面填就行了。下面是四道例題,在框架基礎上進行填充。

1、最小覆蓋子串

給你乙個字串 s、乙個字串 t,請在字串 s 裡面找出:包含 t 所有字元的最小子串。

示例:輸入: s = "adobecodebanc", t = "abc"

輸出: "banc"

說明:如果 s 中不存這樣的子串,則返回空字串 ""。如果 s 中存在這樣的子串,我們保證它是唯一的答案。

class solution }}

return false;

}};

3、找到字串中所有字母異位詞

給定乙個字串 s 和乙個非空字串 p,找到 s 中所有是 p 的字母異位詞的子串,返回這些子串的起始索引。字串只包含小寫英文本母,並且字串 s 和 p 的長度都不超過 20100。

說明:字母異位詞指字母相同,但排列不同的字串。不考慮答案輸出的順序。

示例 1:

輸入:s: "cbaebabacd" p: "abc"

輸出:[0, 6]

解釋:起始索引等於 0 的子串是 "cba", 它是 "abc" 的字母異位詞。起始索引等於 6 的子串是 "bac", 它是 "abc" 的字母異位詞。

class solution 

char d = s[left];

left++;

if(need.count(d))}}

return res;

}};

4、無重複字元的最大子串

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。

示例 1:

輸入: "abcabcbb"

輸出: 3 

解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。

示例 2:

輸入: "bbbbb"

輸出: 1

解釋: 因為無重複字元的最長子串是 "b",所以其長度為 1。

示例 3:

輸入: "pwwkew"

輸出: 3

解釋: 因為無重複字元的最長子串是 "wke",所以其長度為 3。

請注意,你的答案必須是 子串 的長度,"pwke" 是乙個子串行,不是子串。

class solution 

len = max(len,right-left);//更新結果

}return len;

}};

滑動視窗演算法

我們學習過計算機網路都知道為了避免擁塞發生,在網路傳輸時有滑動視窗協議控制傳輸時流量。該協議允許傳送方在停止並等待確認前傳送多個資料分組。由於傳送方不必每發乙個分組就停下來等待確認,因此該協議可以加速資料的傳輸,提高網路吞吐量。這個跟我們今天說的滑動視窗演算法是乙個原理。該演算法的作用就是將我們多層...

滑動視窗演算法

在letecode程式設計中經常會碰到一類尋找最長序列的問題,這個時候都可以採用滑動視窗的演算法 滑動視窗就是控制乙個雙指標left,right,沒有達到極限條件的時候right指標,操作臨界條件 就讓left指標,然後更新這個最長序列。比如下面的的問題 問題一 給你兩個長度相同的字串,s 和 t。...

滑動視窗演算法

滑動視窗演算法可以用以解決陣列 字串的子元素問題,它可以將巢狀的迴圈問題,轉換為單迴圈問題,降低時間複雜度。給定乙個字串,請你找出其中不含有重複字元的最長子串的長度。輸入 s abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。通過不斷滑動視窗的大小,判斷視窗中元...