LeetCode 76 最小覆蓋子串

2021-10-06 20:07:52 字數 1200 閱讀 7750

題目描述:給你乙個字串 s、乙個字串 t,請在字串 s 裡面找出:包含 t 所有字元的最小子串。

示例:

輸入: s = "adobecodebanc", t = "abc"

輸出: "banc"

說明:

這題屬於滑動視窗型別。思路簡單來說就是,用start、end控制乙個滑動視窗。當滑動視窗中未包含所有t中字元,end右移;當滑動視窗中包含所有t中字元時,start右移。統計包含t中所有字元時(即start開始右移時),滑動視窗的最小長度,並記錄長度最小時候的子串。

class

solution

:def

minwindow

(self, s:

str, t:

str)

->

str:

from collections import defaultdict

occ = defaultdict(

int)

#occ記錄滑動視窗中的字元情況

for c in t:

occ[c]+=1

#用start和end表示乙個滑動視窗的開始和結尾

#cnt記錄滑動視窗中 不包含 t中字元的個數

#minlen記錄包含t中所有字元時 滑動視窗的最小長度

start, end, cnt, minlen =0,

0,len(t)

,float

("inf"

) res =

""while end <

len(s)

:if occ[s[end]

]>0:

cnt -=

1 occ[s[end]]-=

1 end +=

1while cnt ==0:

if minlen > end - start:

minlen = end - start

res = s[start:end]

if occ[s[start]]==

0:cnt +=

1 occ[s[start]]+=

1 start +=

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,然後...