滑動視窗演算法框架:移動右側視窗,進行視窗內資料的一系列更新;判斷左側視窗是否需要收縮,再左移視窗,進行視窗內資料的一系列更新。
/* 滑動視窗演算法框架 */
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。通過不斷滑動視窗的大小,判斷視窗中元...