leetcode 76 最小覆蓋子串

2021-08-30 21:39:55 字數 875 閱讀 9410

這道題我使用了很笨的方式花了好久解決了,但是時間複雜度太度,只看網上檢視原始碼,不得不說網上的答案基本都是一樣的,但是對於基礎相對薄弱的我來說這些**看起來很是費勁,還用要加強c++基礎的練習才行。

思路相對來說不是很難:

1 首先構架t字串的hash表,因為字元與ascii碼較好的關係,使用vector陣列map來構造hash表,所存的int型表示該字元出現的次數

vectormap(128,0);

for(auto c: t)

map[c]++;

2使用counter表示字串t的個數,begin end表示子字串的開始下標和結束下標,初始為0  d表示最短子字串的個數 初始為最大值,head表示最小的子字串的初始下標,初始為0   使用head和d可以找到子字串

3首先,先將所有的t的字串找到,每找到乙個,count--,將當前子字串的所有的int值減1,第一次找到t中所有的字元後,count=0,所有t中字元對應的hash值都等於0,而s在中不在t中的字元對應的hash值都小於0

4 當begin下標對應的字元等於0時,表示該字元在t中,往後移動視窗時,當前begin在視窗外,所以此時count++,begin向後移動之後,再次使得count==0,以此迴圈,直到視窗到達最後,找到最小的視窗

string minwindow(string s, string t) 

else

while(counter==0){ //valid

if(end-begin網上原始碼有點兒複雜,看起來很矇,我將其簡單化

LeetCode76 最小覆蓋子串

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

leetcode76 最小覆蓋子串

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

LeetCode 76 最小覆蓋子串

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