76 最小覆蓋子串

2021-10-07 21:26:25 字數 1119 閱讀 4998

題目描述:

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

示例:

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

輸出: 「banc」

說明:

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

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

方法1:使用滑動視窗

主要思路:

(1)滑動視窗的通常做法,將視窗從頭開始,先右側邊界擴充套件,擴大視窗,然後判斷當前視窗是否滿足要求,若是不滿足,則接著擴大右側邊界,若當前視窗滿足某種條件,則開始變化左側視窗邊界,減小視窗,直到視窗不再滿足條件,然後再開始接著擴充套件右側邊界;

(2)然後,根據不同的題目內容,構造不同的視窗判斷條件;

(3)這裡使用了兩個 unordered_map,既 unordered_mapneed,win; 在need中儲存需要判斷的字串 t 內的字元的情形,在win中,用來更新,儲存 s 中的內容,直到win中的內容滿足了某種要求,這裡使用變數valid來統計這種要求,既valid==need.size(),既當前視窗內具有了 t 中的全部內容,可以進一步的減小視窗,既變化視窗左邊界,直到該要求不再滿足;

class

solution

int left=0;

int right=0;

int start=0;

int len=int_max;

int valid=0;

while

(rightsize()

)while

(valid==need.

size()

) ch=s[left++];

if(need.

count

(ch))}

}return len==int_max?

"":s.

substr

(start,len)

;//根據是否找到子字串,返回結果}}

;

76 最小覆蓋子串

題目 給你乙個字串s 乙個字串t,請在字串s裡面找出 包含t所有字母的最小子串。示例 輸入 s adobecodebanc t abc 輸出 banc 方法一 自己寫的,但是leetcode上超時 defminwindow s,t m 0 all in false iflen t 0or len s...

76 最小覆蓋子串

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

76最小覆蓋子串

給你乙個字串 s 乙個字串 t,請在字串 s 裡面找出 包含 t 所有字母的最小子串。示例 輸入 s adobecodebanc t abc 輸出 banc 說明 滑動視窗解法。hashmap方式 param s param t return public static string minwind...