Leetcode滑動視窗四題小結(Python)

2021-10-10 00:03:54 字數 3834 閱讀 2092

這種型別的題就是模板題,以後套模板就行了。需要注意的幾個地方在注釋中給出。

3. 無重複字元的最長子串

中等題點評:這個題過於簡單,以至於模板整體結構都被改掉了,想看模板的建議從下面開始看。

class

solution

:def

lengthoflongestsubstring

(self, s:

str)

->

int:

window =

l, r =0,

0 res =

0while r <

len(s)

: c = s[r]

r +=

1if c in window.keys(

): window[c]+=1

else

: window[c]=1

while window[c]

>1:

d = s[l]

l +=

1 window[d]-=1

res =

max(r-l, res)

return res

76. 最小覆蓋子串

困難題點評:一切滑動視窗題都可以從這套模板中修改出來。困難題一樣秒殺!!!

class

solution

:def

minwindow

(self, s:

str, t:

str)

->

str:

iflen

(s)<

len(t)

:return

"" window, need =

,for c in t:

#儲存要識別/包含/排列的字串中的字元及其個數

if c in need.keys(

): need[c]+=1

else

: need[c]=1

l, r =0,

0 n =

len(s)

res =

"" valid =

0while r < n:

c = s[r]

#右邊移入視窗

r +=

1if c in need:

#視窗內的資料更新(只需統計在need中的字元)

if c in window:window[c]+=1

else

:window[c]=1

if window[c]

== need[c]

:valid +=

1while valid ==

len(need)

:#需要計算的操作,這裡是輸出最小的子串

if res ==

""or r-l <

len(res)

: res = s[l:r]

d = s[l]

#左邊移出視窗

l +=

1if d in need:

#視窗內的資料更新(只需統計在need中的字元)

if window[d]

== need[d]

:valid -=

1 window[d]-=1

return res

438. 找到字串中所有字母異位詞

中等題點評:秒殺!!!

class

solution

:def

findanagrams

(self, s:

str, p:

str)

-> list[

int]:if

len(s)

<

len(p)

:return

need, window =

,for c in p:

if c in need.keys(

): need[c]+=1

else

: need[c]=1

l, r =0,

0 n =

len(s)

res =

valid =

0while r < n:

cur = s[r]

#右入 r +=

1if cur in need.keys():

#視窗內操作

if cur in window.keys(

): window[cur]+=1

else

: window[cur]=1

if window[cur]

== need[cur]

: valid +=

1while r-l >=

len(p)

:#根據題意選擇輸出結果

if valid ==

len(need)

: cur = s[l]

#左出 l +=

1if cur in need.keys():

#視窗內操作

if window[cur]

== need[cur]

: valid -=

1 window[cur]-=1

return res

567. 字串的排列

中等題點評:和上題幾乎一樣,秒殺!!!

class

solution

:def

checkinclusion

(self, s1:

str, s2:

str)

->

bool:if

len(s2)

<

len(s1)

:return

false

need, window =

,for s in s1:

if s in need.keys(

): need[s]+=1

else

: need[s]=1

l, r =0,

0 valid =

0while r <

len(s2)

: c = s2[r]

r +=

1if c in need.keys():

if c in window.keys(

): window[c]+=1

else

: window[c]=1

if need[c]

== window[c]

: valid +=

1while r-l >=

len(s1)

:if valid ==

len(need)

:return

true

d = s2[l]

l +=

1if d in need.keys():

if need[d]

== window[d]

: valid -=

1 window[d]-=1

return

false

總結:

記住模板,忘了來看,來背。

Leetcode 滑動視窗型別題總結

目錄 sliding window 分為滑動視窗和固定視窗 滑動視窗 固定視窗 滑動視窗題目一般是在陣列 鍊錶 字串等線性結構上進行操作,比如找最長的子字串 最短的子字串等等 判斷是否需要用滑動視窗法 物件是陣列 鍊錶 字串等線性結構 題目要求求具有最短 最長 或固定長度的子串行 滑動視窗問題一般具...

滑動視窗leetcode

給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗 k 內的數字。滑動視窗每次只向右移動一位。返回滑動視窗最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大值 1 ...

leetcode 滑動視窗

面試題57 ii.和為s的連續正數序列 題目 輸入乙個正整數 target 輸出所有和為 target 的連續正整數序列 至少含有兩個數 序列內的數字由小到大排列,不同序列按照首個數字從小到大排列。題解 摘自 什麼是滑動視窗 滑動視窗可以看成陣列中框起來的乙個部分。在一些陣列類題目中,我們可以用滑動...