本題**於:leetcode-76 難度hard。
給你乙個字串 s、乙個字串 t,請在字串 s 裡面找出:包含 t 所有字元的最小子串。
示例:輸入: s = "adobecodebanc", t = "abc"
輸出: "banc"
說明:如果 s 中不存這樣的子串,則返回空字串 ""。
如果 s 中存在這樣的子串,我們保證它是唯一的答案。
題目很好理解,翻譯成大白話就是在字串s中,找出一段包含字串t中所有元素的,且長度最小的子串。
1、注意到本題目中我們對字串的順序並沒有要求,為了降低複雜度,我們可以用hash表來表示字串s和t。其中map1表示字串t,map2表示字串s中,包含字串t的子串。
2、當map2**現的某個字元c的數量與map1**現的字元c的數量相等時,完成一次匹配。
3、當全部匹配完成時,我們得到乙個匹配結果。
4、比較視窗大小,如果當前視窗小於以前視窗,則更新視窗
5、否則的話對左視窗元素調整,如果目標子串擁有左視窗元素,那麼減小左視窗元素數量,如果視窗內的元素c的數量小於目標子串中,元素c的數量,那麼匹配數量-1。
6、如果包含左視窗元素,那麼視窗繼續滑動
public string minwindow
(string s, string t)
}int left=
0,right=0;
int matchcount=0;
int start=0;
int minlen=integer.max_value;
while
(right} right++
;while
(matchcount==nodupcount)
char cc=cs[left];if
(map[cc]
>0)
} left++;}
}return minlen==integer.max_value?
"":s.
substring
(start,start+minlen)
;}
最小覆蓋子串
給你乙個字串 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 中存在這樣的子串,我們保證它是唯一的答案。思路 參考大佬的解題思路,超級清晰 ...