1. 程式人生 > 其它 >leecode.76. 最小覆蓋子串

leecode.76. 最小覆蓋子串

技術標籤: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; } };