LeetCode 76 最小覆蓋子串(Hard)

2021-10-13 23:53:01 字數 1398 閱讀 7776

【題目鏈結】

簡簡單單,非常容易理解的滑動視窗思想

【13行核心**】簡潔清晰!

:### 0104 滑動視窗(92 ms,15.2 mb)

defminwindow

(self, s:

str, t:

str)

->

str:

# 初始化最短字串長度為正無窮

min_len, res =

float

('+inf'),

''# 初始化滑動視窗左、右邊界均為0

l = r =

0# 統計字串t中目標字元的數量

cnt =

len(t)

# 定義乙個初始化為0的字典pos_neg(雜湊表)

# pos_neg中為正的是目標字元,為負的是非目標字元

# 為0表示目標字元已被包含完

pos_neg = collections.defaultdict(

int)

# 統計t中的字元數量cnt

for c in t:

pos_neg[c]+=1

# 當右邊界不超過字串s的最後乙個字元,進行迴圈

while r <

len(s)

:# 滑動視窗右邊界移動後,恢復目標字元和非目標字元的數量(減一)

# 判斷當前右邊界指向的字元是否為目標字元

# 若是則目標字元數量cnt減一

if pos_neg[s[r]

]>0:

cnt -=

1 pos_neg[s[r]]-=

1# 右邊界右移

r +=

1# 若目標字元已經被包含完,則盡可能縮減最小覆蓋子串的長度

while cnt ==0:

# 若出現更短的覆蓋子串,則更新最小覆蓋子串

if min_len > r - l:

min_len = r - l

res = s[l: r]

# 滑動視窗左邊界移動後,恢復目標字元和非目標字元的數量(加一)

# 判斷當前左邊界指向的字元是否是目標字元

if pos_neg[s[l]]==

0:cnt +=

1 pos_neg[s[l]]+=

1# 左邊界右移

l +=

1return res

LeetCode76 最小覆蓋子串

給定乙個字串 s 和乙個字串 t,請在 s 中找出包含 t 所有字母的最小子串。示例 輸入 s adobecodebanc t abc 輸出 banc 說明 字串和雜湊表的問題。hashmap來儲存t字串中個字母元素的出現次數,left right記錄當前子字串的左右下標值,min minleft ...

leetcode 76 最小覆蓋子串

這道題我使用了很笨的方式花了好久解決了,但是時間複雜度太度,只看網上檢視原始碼,不得不說網上的答案基本都是一樣的,但是對於基礎相對薄弱的我來說這些 看起來很是費勁,還用要加強c 基礎的練習才行。思路相對來說不是很難 1 首先構架t字串的hash表,因為字元與ascii碼較好的關係,使用vector陣...

leetcode76 最小覆蓋子串

給定乙個字串 s 和乙個字串 t,請在 s 中找出包含 t 所有字母的最小子串。示例 輸入 s adobecodebanc t abc 輸出 banc 說明 如果 s 中不存這樣的子串,則返回空字串 如果 s 中存在這樣的子串,我們保證它是唯一的答案。典型雙指標滑動串列埠題目,先將t建dict,然後...