76. Minimum Window Substring
Hard
1934130FavoriteShare
Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).
Example:
Input: S = "ADOBECODEBANC", T = "ABC" Output: "BANC"
Note:
- If there is no such window in S that covers all characters in T, return the empty string
""
. - If there is such window, you are guaranteed that there will always be only one unique minimum window in S.
题意:
题解:
class Solution {
public:
bool is_window_ok(int map_s[], int map_t[], vector<int>& vec_t){
for (int i = 0; i < vec_t.size(); i++){
if(map_s[vec_t[i]] < map_t[vec_t[i]]){
return false;
}
}
return true;
}
string minWindow(string s, string t) {
const int MAX_ARRAY_LEN = 128;
int map_t[MAX_ARRAY_LEN] = {0};
int map_s[MAX_ARRAY_LEN] = {0};
vector<int> vec_t;
for (int i = 0; i < t.length(); i++){
map_t[t[i]]++;
}
for (int i = 0; i < MAX_ARRAY_LEN; i++){
if(map_t[i] > 0){
vec_t.push_back(i);
}
}
int window_begin = 0;
string result = "";
for (int i = 0; i < s.length(); i++){
map_s[s[i]]++;
while(window_begin < i){
if(map_t[s[window_begin]] == 0){
window_begin++;
} else if(map_s[s[window_begin]] > map_t[s[window_begin]]){
map_s[s[window_begin]]--;
window_begin++;
} else {
break;
}
}
if(is_window_ok(map_s, map_t, vec_t)){
if(result == "" || result.size() > (i - window_begin + 1)){
result = s.substr(window_begin, i - window_begin + 1);
}
}
}
return result;
}
};