給你乙個字串 s、乙個字串 t,請在字串 s 裡面找出:包含 t 所有字元的最小子串。
示例:
輸入: s = 「adobecodebanc」, t = 「abc」說明:輸出: 「banc」
如果 s 中不存這樣的子串,則返回空字串 「」。參考【演算法基礎課】最長連續不重複子串。如果 s 中存在這樣的子串,我們保證它是唯一的答案。
分成幾個子問題:
(1)如何檢測字串a包含字串b的全部內容?
首先,字串b中的字母可以重複。其次,a中包含b中的所有字元,無需考慮順序。所以,可以把b中的每個不重複字元的個數儲存到b_map中,把a中對應字元的個數也存起來到a_map。只要a_map中的每個字元的個數都大於等於b_map的字元個數即可。
(2)如何在字串s中滑動視窗?
a. 將end的指標向後移動,直到從0到end的子字串符合條件。
b. 將start指標從0開始向後移一位,如果此時的子字串不符合條件了,那就繼續移動end指標,直到符合條件。
為什麼要這樣做呢?因為如果不把start指標向後移動,end向後移,得到的子字串只會更大。而移動一位之後長度可能減一。
c.當再次得到符合條件的字串時,就繼續向後移動start指標直到不滿足條件,此時得到的一定是最短的字串了。
for迴圈的簡寫方式:class
solution
return
true
;}
string minwindow
(string s, string t)
for(
int i=
0,j=
0;isize()
;i++
)while
(checkcontainall()
)if(t_mp.
find
(s[j]
)!=t_mp.
end())
j++;}
}if(a!=-1
)else
return"";
}};
(1)string
(2)mapfor
(const
auto
&c:t)
檢測雜湊表中是否存在某個值for
(const
auto
&p:t_mp)
t_mp.
find
(s[j]
)!=t_mp.
end(
)//存在則為true
LeetCode76 最小覆蓋子串
給定乙個字串 s 和乙個字串 t,請在 s 中找出包含 t 所有字母的最小子串。示例 輸入 s adobecodebanc t abc 輸出 banc 說明 字串和雜湊表的問題。hashmap來儲存t字串中個字母元素的出現次數,left right記錄當前子字串的左右下標值,min minleft ...
leetcode 76 最小覆蓋子串
這道題我使用了很笨的方式花了好久解決了,但是時間複雜度太度,只看網上檢視原始碼,不得不說網上的答案基本都是一樣的,但是對於基礎相對薄弱的我來說這些 看起來很是費勁,還用要加強c 基礎的練習才行。思路相對來說不是很難 1 首先構架t字串的hash表,因為字元與ascii碼較好的關係,使用vector陣...
leetcode76 最小覆蓋子串
給定乙個字串 s 和乙個字串 t,請在 s 中找出包含 t 所有字母的最小子串。示例 輸入 s adobecodebanc t abc 輸出 banc 說明 如果 s 中不存這樣的子串,則返回空字串 如果 s 中存在這樣的子串,我們保證它是唯一的答案。典型雙指標滑動串列埠題目,先將t建dict,然後...