leetcode76 最小覆蓋子串

2021-09-11 20:48:39 字數 1306 閱讀 3914

給定乙個字串 s 和乙個字串 t,請在 s 中找出包含 t 所有字母的最小子串。

示例:

輸入: s = 「adobecodebanc」, t = 「abc」

輸出: 「banc」

說明:如果 s 中不存這樣的子串,則返回空字串 「」。

如果 s 中存在這樣的子串,我們保證它是唯一的答案。

典型雙指標滑動串列埠題目,先將t建dict,然後右指標滑動,如果右指標處數在t_dict,那麼看是否需要count+1,再判斷count和len_t的大小,如果相同就判斷是不是最短,然後左指標滑動,看左指標處數是否在t_dict,根據這個修改count:

class

solution

:def

minwindow

(self, s, t)

:"""

:type s: str

:type t: str

:rtype: str

"""iflen

(s)<

len(t)

:return

'' left, right, count, t_dict, len_s =0,

0,0,

,len

(s) res, min_len, len_t =

'', len_s+1,

len(t)

for c in t:

t_dict[c]

= t_dict.get(c,0)

+1while right < len_s:

a = s[right]

if a in t_dict:

t_dict[a]-=1

if t_dict[a]

>=0:

count +=

1# 如果增加了個新元素count加一

while count == len_t:

if right-left+

1< min_len:

res = s[left:right+1]

min_len = right-left+

1 b = s[left]

if b in t_dict:

t_dict[b]+=1

if t_dict[b]

>0:

# 如果該處元素在t中

count -=

1 left +=

1 right +=

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陣...

LeetCode 76 最小覆蓋子串

給定乙個字串 s 和乙個字串 t,請在 s 中找出包含 t 所有字母的最小子串。示例 輸入 s adobecodebanc t abc 輸出 banc 說明 此題屬於滑動視窗的一類問題。首先把字串t中的字元都存入雜湊表中,然後從頭開始遍歷字串s,每遇到乙個字元,就把它在雜湊表中的值減一,如果減一後雜...