演算法 最小覆蓋子串

2021-10-08 01:55:00 字數 1108 閱讀 4906

本題**於: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 中存在這樣的子串,我們保證它是唯一的答案。思路 參考大佬的解題思路,超級清晰 ...