給定乙個字串 s 和乙個字串 t,請在 s 中找出包含 t 所有字母的最小子串。
示例:
輸入: s = "adobecodebanc", t = "abc"說明:輸出: "banc"
字串和雜湊表的問題。
hashmap來儲存t字串中個字母元素的出現次數,left right記錄當前子字串的左右下標值,min
minleft minright 變數儲存當前子字串的最小長度以及左右下標。
首先從前向後遍歷字串,找到包含t中元素的子字串,遍歷的同時記得更新hashmap中的字母元素次數的個數,每出現一次對應-1,同時count++,在count++的時候要注意: aedbbac 找abc 時, b連續出現過兩次,在count++的時候只在b出現的第一次++, 第二次不+,因為我們只需要乙個b。
然後就是left向後收縮,right向後擴充套件,left向後收縮也就是left++的乙個過程,去掉無用字元,每去掉乙個字元的時候要對應判斷一下是否是t中元素,將hashmap中的頻率更新,以及count--,在count--的時候需要注意,即使當前刪減的字元是t中元素,但是它在hashmap中的計數次數是否是》=0, 也就是它是否重複出現比如上一步驟的例子: aedbbac 找abc 時, 顯然當left指向第乙個b時,hashmap中要更新,但是count不要--。
之後就是不斷更新min和minleft minright。
class solution
while (count == t.length())
char c = s.charat(left);
if (map.containskey(c))
left++;}}
return min == integer.max_value ? "" : s.substring(minleft,minright+1);
}}
leetcode 76 最小覆蓋子串
這道題我使用了很笨的方式花了好久解決了,但是時間複雜度太度,只看網上檢視原始碼,不得不說網上的答案基本都是一樣的,但是對於基礎相對薄弱的我來說這些 看起來很是費勁,還用要加強c 基礎的練習才行。思路相對來說不是很難 1 首先構架t字串的hash表,因為字元與ascii碼較好的關係,使用vector陣...
leetcode76 最小覆蓋子串
給定乙個字串 s 和乙個字串 t,請在 s 中找出包含 t 所有字母的最小子串。示例 輸入 s adobecodebanc t abc 輸出 banc 說明 如果 s 中不存這樣的子串,則返回空字串 如果 s 中存在這樣的子串,我們保證它是唯一的答案。典型雙指標滑動串列埠題目,先將t建dict,然後...
LeetCode 76 最小覆蓋子串
給定乙個字串 s 和乙個字串 t,請在 s 中找出包含 t 所有字母的最小子串。示例 輸入 s adobecodebanc t abc 輸出 banc 說明 此題屬於滑動視窗的一類問題。首先把字串t中的字元都存入雜湊表中,然後從頭開始遍歷字串s,每遇到乙個字元,就把它在雜湊表中的值減一,如果減一後雜...