滑動視窗演算法在乙個特定大小的字串或陣列上進行操作,而不在整個字串和陣列上操作,這樣就降低了問題的複雜度,從而也達到降低了迴圈的巢狀深度。
如下題
給你兩個長度相同的字串,s 和 t。字串s將 s 中的第 i 個字元變到 t 中的第 i 個字元需要 |s[i] - t[i]| 的開銷(開銷可能為 0),也就是兩個字元的
ascii 碼值的差的絕對值。
用於變更字串的最大預算是 maxcost。在轉化字串時,總開銷應當小於等於該預算,這也意味著字串的轉化可能是不完全的。
如果你可以將 s 的子字串轉化為它在 t 中對應的子字串,則返回可以轉化的最大長度。
如果 s 中沒有子字串可以轉化成 t 中對應的子字串,則返回 0。
示例 1:
輸入:s = 「abcd」, t = 「bcdf」, cost = 3 輸出:3 解釋:s 中的 「abc」 可以變為 「bcd」。開銷為
3,所以最大長度為 3。 示例 2:
輸入:s = 「abcd」, t = 「cdef」, cost = 3 輸出:1 解釋:s 中的任一字元要想變成 t
中對應的字元,其開銷都是 2。因此,最大長度為 1。 示例 3:
字串t
開銷最大長度
[a] b c d
[b] c d f11
[a b] c d
[b c] d f22
[a b c] d
[b c d] f33
a [b c d]
b [c d f]43
只需要返回視窗的大小就是該開銷可以轉化的最大長度
**如下
class
solution
}return s.
size()
- left;}}
;
滑動視窗演算法
我們學習過計算機網路都知道為了避免擁塞發生,在網路傳輸時有滑動視窗協議控制傳輸時流量。該協議允許傳送方在停止並等待確認前傳送多個資料分組。由於傳送方不必每發乙個分組就停下來等待確認,因此該協議可以加速資料的傳輸,提高網路吞吐量。這個跟我們今天說的滑動視窗演算法是乙個原理。該演算法的作用就是將我們多層...
滑動視窗演算法
在letecode程式設計中經常會碰到一類尋找最長序列的問題,這個時候都可以採用滑動視窗的演算法 滑動視窗就是控制乙個雙指標left,right,沒有達到極限條件的時候right指標,操作臨界條件 就讓left指標,然後更新這個最長序列。比如下面的的問題 問題一 給你兩個長度相同的字串,s 和 t。...
滑動視窗演算法
滑動視窗演算法可以用以解決陣列 字串的子元素問題,它可以將巢狀的迴圈問題,轉換為單迴圈問題,降低時間複雜度。給定乙個字串,請你找出其中不含有重複字元的最長子串的長度。輸入 s abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。通過不斷滑動視窗的大小,判斷視窗中元...