leecode.76. 最小覆蓋子串
阿新 • • 發佈:2021-01-06
技術標籤:leecode-字串
題目
給你一個字串 s 、一個字串 t 。返回 s 中涵蓋 t 所有字元的最小子串。如果 s 中不存在涵蓋 t 所有字元的子串,則返回空字串 “” 。
注意:如果 s 中存在這樣的子串,我們保證它是唯一的答案。
示例一
輸入:s = “ADOBECODEBANC”, t = “ABC”
輸出:“BANC”
思路分析
使用一個滑動視窗,使得窗口裡面的字母始終滿足覆蓋。
程式碼
class Solution {
public:
string minWindow(string s, string t) {
int hashTable[256 ] = {0};
for(char c : t) hashTable[(int)c]++;
int l = 0, r = 0, tot = 0, n = s.size(), cnt = t.size(), minn = 0x3f3f3f3f;
string ans = "";
while(r < n){
int i = (int)s[r];
hashTable[i]--;
if(hashTable[i] >= 0) tot++;
while (tot == cnt){
if(minn > r - l + 1){
minn = r - l + 1;
ans = s.substr(l, r - l + 1);
}
int j = (int)s[l];
hashTable[j]++;
if(hashTable[j] > 0) tot--;
l++;
}
r++;
}
return ans;
}
};