滑动窗口加HASH表:
class Solution {
private:
map<char, int> data;
bool check(map<char, int> &data) {
map<char, int>::iterator it;
for (it = data.begin(); it != data.end(); it++) {
if (it->second > 0)
return false;
}
return true;
}
public:
string minWindow(string s, string t) {
if(t.size()>s.size())
return "";
int out = 0, len = INT_MAX;
for (char temp : t)
data[temp] += 1;
int left = 0, right = 0;
while (right<s.size()) {
if (data.find(s[right]) != data.end())
data[s[right]] -= 1;
if (!check(data))
right++;
else {
while (check(data)) {
if (data.find(s[left]) != data.end())
data[s[left]] += 1;
left++;
}
if ((right - left + 2)<len) {
out = left - 1;
len = right - left + 2;
}
right++;
}
}
if(len!=INT_MAX)
return s.substr(out, len);
else
return "";
}
};