題目描述:
給你乙個字串 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...