class Solution {
public:
int getIndex(char ch) {
if(ch >= 'A' && ch <= 'Z') return ch - 'A';
return ch - 'a' + 26;
}
string minWindow(string s, string t) {
string ans = "";
set<int> is_in_t;
vector<int> t_cnt(52, 0);
for(auto ch : t) {
int ind = getIndex(ch);
t_cnt[ind]++;
is_in_t.insert(ind);
}
int l = 0;
vector<int> sub_s_cnt(52, 0);
for(int r = 0; r < s.size(); r++) {
sub_s_cnt[getIndex(s[r])]++;
for(int ind = getIndex(s[l]); l < r && sub_s_cnt[ind] > t_cnt[ind]; ) {
sub_s_cnt[ind]--;
ind = getIndex(s[++l]);
}
if(r >= l && r - l + 1 >= t.size()) {
bool flag = true;
for(set<int>::iterator it = is_in_t.begin(); it != is_in_t.end(); it++) {
if(sub_s_cnt[*it] < t_cnt[*it]) {
flag = false;
break;
}
}
if(flag && (!ans.size() || r - l + 1 <= ans.size())) ans = s.substr(l, r - l + 1);
}
}
return ans;
}
};
【leetcode 滑动窗口 C++】76. Minimum Window Substring
最新推荐文章于 2021-07-01 08:41:10 发布