Leetcode刷題76 最小覆蓋子串

2021-10-13 17:17:57 字數 1655 閱讀 5718

給你乙個字串 s 、乙個字串 t 。返回 s 中涵蓋 t 所有字元的最小子串。如果 s 中不存在涵蓋 t 所有字元的子串,則返回空字串 "" 。

注意:如果 s 中存在這樣的子串,我們保證它是唯一的答案。

示例 1:

輸入:s = "adobecodebanc", t = "abc"

輸出:"banc"

示例 2:

輸入:s = "a", t = "a"

輸出:"a"

感謝labuladong大神,傳送門我寫了套框架,把滑動視窗演算法變成了默寫題。

class solution 

//方法二:使用陣列儲存字串

//時間複雜度o(mn)

private string minwindowii(string s, string t)

int left = 0, right = 0;

//統計目前視窗中已經找到了多少個字元

int valid = 0;

//start為涵蓋t中所有字元的子串在s中開始的位置,len為子串的長度

int start = 0, len = integer.max_value;

char str = s.tochararray();

while (right < str.length)

//開始收縮視窗

while (valid == t.length())

char d = str[left];

//向左移動

left++;

//更新視窗資料

if (need[d] > 0 && need[d] >= window[d])

window[d]--;}}

return len == integer.max_value ? "" : s.substring(start, start + len);

}//方法一:使用hashmap定義兩個視窗分別儲存字串t和字串s中字元出現的次數

//時間複雜度o(mn),n是s的長度

//空間複雜度o(m),m為t的長度

private string minwindowi(string s, string t)

int left = 0, right = 0;

//當valid=need.size()時,需要收縮視窗

int valid = 0;

//start為涵蓋t中所有字元的子串在s中開始的位置,len為子串的長度

int start = 0, len = integer.max_value;

char str = s.tochararray();

while (right < str.length)

}//開始收縮視窗

while (valid == need.size())

char d = str[left];

//向左移動

left++;

//更新視窗資料

if (need.containskey(d))

window.put(d, window.get(d) - 1);}}

}return len == integer.max_value ? "" : s.substring(start, start + len);

}}

leetcode刷題python之最小覆蓋子串

題目 給你乙個字串 s 乙個字串 t,請在字串 s 裡面找出 包含 t 所有字母的最小子串。示例 輸入 s adobecodebanc t abc 輸出 banc 學到了 之前沒記住又遇到了 新函式 counter 可以直接把字串變成字元 別的也行 的結合 all 判斷列表有沒有空字串或者0,有則返...

LeetCode刷題 76 最小覆蓋子串

給你乙個字串s 乙個字串t,請在字串s裡面找出 包含t所有字母的最小子串。示例 輸入 s adobecodebanc t abc 輸出 banc 說明 如果s中不存這樣的子串,則返回空字串 如果s中存在這樣的子串,我們保證它是唯一的答案。class solution 建立對映計數 maptemp n...

雜湊錶類題目 Leetcode76題 最小覆蓋子串

給你乙個字串 s 乙個字串 t 請你設計一種演算法,可以在 o n 的時間複雜度內,從字串 s 裡面找出 包含 t 所有字元的最小子串。示例 輸入 s adobecodebanc t abc 輸出 banc 如果 s 中不存這樣的子串,則返回空字串 如果 s 中存在這樣的子串,我們保證它是唯一的答案...