2022-11-29 10:25:47 +00:00
|
|
|
|
#include "s0076_minimum_window_substring.hpp"
|
|
|
|
|
|
2022-11-30 10:20:36 +00:00
|
|
|
|
bool S0076::check() {
|
2022-11-29 10:25:47 +00:00
|
|
|
|
for (const auto &p : ori) {
|
|
|
|
|
if (cnt[p.first] < p.second) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 不包含 t 中所有字符,r 右移
|
|
|
|
|
// 包含 t 中所有字符,l 右移
|
2022-11-30 10:20:36 +00:00
|
|
|
|
string S0076::minWindow(string s, string t) {
|
2022-11-29 10:25:47 +00:00
|
|
|
|
for (const auto &c : t) {
|
|
|
|
|
++ori[c];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int l = 0, r = -1;
|
|
|
|
|
int len = INT_MAX, ansL = -1, ansR = -1;
|
|
|
|
|
|
|
|
|
|
while (r < int(s.size())) {
|
|
|
|
|
if (ori.find(s[++r]) != ori.end()) {
|
|
|
|
|
++cnt[s[r]];
|
|
|
|
|
}
|
|
|
|
|
while (check() && l <= r) {
|
|
|
|
|
if (r - l + 1 < len) {
|
|
|
|
|
len = r - l + 1;
|
|
|
|
|
ansL = l;
|
|
|
|
|
}
|
|
|
|
|
if (ori.find(s[l]) != ori.end()) {
|
|
|
|
|
--cnt[s[l]];
|
|
|
|
|
}
|
|
|
|
|
++l;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ansL == -1 ? string() : s.substr(ansL, len);
|
|
|
|
|
}
|