
滑动窗口加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 "";
}
};
本文介绍了一种使用滑动窗口和HASH表解决字符串匹配问题的高效算法。通过维护一个滑动窗口和一个记录字符频率的HASH表,算法能够在O(n)的时间复杂度内找到目标子串在源串中的最小覆盖窗口。
5万+

被折叠的 条评论
为什么被折叠?



