最小覆蓋子串

2021-10-10 17:44:31 字數 832 閱讀 4929

給出兩個字串 s和t ,要求在的時間複雜度o(n)內在s 中找出最短的包含 t中所有字元的子串。

例如:s ="xdoyezodeyxnz"

t ="xyz"

找出的最短子串為"yxnz".

注意:如果 s 中沒有包含 t 中所有字元的子串,返回空字串 「」;

滿足條件的子串可能有很多,但是題目保證滿足條件的最短的子串唯一。

示例1

"xdoyezodeyxnz","xyz"
"yxnz"
【解析】

主要思路是通過兩次遍歷找到所有可能的視窗(即從s中從begin到end包含乙個t),

通過以下幾個步驟實現:

1)為了減少時間複雜度,用map記錄t中所有字元出現的次數,

2)使用count在s中尋找時計數,一旦找到乙個t中的字元就count++,同時map中當前字元的次數減1,

3)當count等於t的長度時,即找到了乙個包含t的字串,然後通過比較每個找到的字串的長度,選擇最短字串,即為題中所求

class solution ;

// 統計t中各字元出現的次數

for(int i=0;i0)

while(count==0)

if(map[s[begin++]]++ ==0)}}

if(num!=int_max) str=s.substr(head, num);

return str;

}};

最小覆蓋子串

給你乙個字串 s 乙個字串 t,請在字串 s 裡面找出 包含 t 所有字母的最小子串。示例 輸入 s adobecodebanc t abc 輸出 banc 說明 如果 s 中不存這樣的子串,則返回空字串 如果 s 中存在這樣的子串,我們保證它是唯一的答案。滑動視窗。設定left,right兩個游標...

最小覆蓋子串

描述 給你乙個字串 s 乙個字串 t,請在字串 s 裡面找出 包含 t 所有字母的最小子串。示例 輸入 s adobecodebanc t abc 輸出 banc 說明 如果 s 中不存這樣的子串,則返回空字串 如果 s 中存在這樣的子串,我們保證它是唯一的答案。實現 class solution ...

最小覆蓋子串

題目 給你乙個字串 s 乙個字串 t,請在字串 s 裡面找出 包含 t 所有字母的最小子串。示例 輸入 s adobecodebanc t abc 輸出 banc 說明 如果 s 中不存這樣的子串,則返回空字串 如果 s 中存在這樣的子串,我們保證它是唯一的答案。思路 參考大佬的解題思路,超級清晰 ...