题解
双指针法,移动窗口法(Sliding Window)
很重要的题。
这道题要求地很细,移动窗口的时候,要同时记录,开始位置、长度和包含目标字符的个数count。
class Solution {
public:
string minWindow(string s, string t) {
int min_start = 0, min_len = INT_MAX;
int start = 0, end = 0;
int count = t.size();
unordered_map<char, int> m;
for(char c : t) m[c]++;
while(end < s.size()) {
if(m[s[end]] > 0) count--;
m[s[end]]--;
while(count == 0) {
m[s[start]]++;
if(end-start+1 < min_len) {
min_start = start;
min_len = end-start+1;
}
if(m[s[start]] > 0) count++;
start++;
}
end++;
}
if(min_len == INT_MAX) return "";
return s.substr(min_start, min_len);
}
};