這種型別的題就是模板題,以後套模板就行了。需要注意的幾個地方在注釋中給出。
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 的連續正整數序列 至少含有兩個數 序列內的數字由小到大排列,不同序列按照首個數字從小到大排列。題解 摘自 什麼是滑動視窗 滑動視窗可以看成陣列中框起來的乙個部分。在一些陣列類題目中,我們可以用滑動...