給定乙個字串 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,每遇到乙個字元,就把它在雜湊表中的值減一,如果減一後雜...