待补:
class Solution {
public:
string minWindow(string s, string t) {
int len = t.length();
for(int i = 0; len <= s.length(); ++i){
if(i + len <= s.length()){
string m(s,i,len);
if(subString(m,t)) return m;
}
else{
i=-1;
len++;
}
}
return "";
}
bool subString(string& s,string& t){/*
string::size_type position;
string a(s),b(t);
sort(a.begin(), a.end());
sort(b.begin(), b.end());
position = a.find(b);
if(position != string::npos) return true;
else return false;
}*/
bool subString(string& s,string& t){
int need[128]={0},needCnt = t.length();
for(char c: t){
need[c]++;
}
for(char c:s){
if(need[c]>0){
need[c]--;
needCnt--;
}
}
if(needCnt==0) return true;
else return false;
}
};
正解(滑动窗口):
class Solution {
public:
string minWindow(string s, string t) {
int l = 0, r = 0, needCnt = t.length(), size = INT_MAX;
int need[128]={0};
for(char c: t){
need[c]++;
}
int start = 0;
while(r < s.length()){
if(need[s[r]] > 0) needCnt--;
need[s[r]]--;
if(needCnt == 0){
while(l < r && need[s[l]]<0){
need[s[l++]]++;
}
if(r-l+1 < size){
size = r - l + 1;
start = l;
}
need[s[l++]]++;
needCnt++;
}
r++;
}
return size==INT_MAX ? "" : s.substr(start, size);
}
};