#include <iostream>
#include <string>
#include <cstring>
#define INT_MAX 10000
using namespace std;
bool minWindow(const char* S, const char *T, int &minWindowBegin, int &minWindowEnd) {
int sLen = strlen(S);
int tLen = strlen(T);
int needToFind[256] = {0};
for (int i = 0; i < tLen; i++)
needToFind[T[i]]++;
int hasFound[256] = {0};
int minWindowLen = INT_MAX;
int count = 0;
int begin,end,windowLen;
for (begin = 0, end = 0; end < sLen; end++) {
if (needToFind[S[end]] == 0) continue;
hasFound[S[end]]++;
if (hasFound[S[end]] <= needToFind[S[end]])
count++;
if (count == tLen) {
while (needToFind[S[begin]] == 0 || hasFound[S[begin]] > needToFind[S[begin]]) {
if (hasFound[S[begin]] > needToFind[S[begin]])
hasFound[S[begin]]--;
begin++;
}
windowLen = end - begin + 1;
//cout<<windowLen<<endl;
if (windowLen < minWindowLen) {
minWindowBegin = begin;
minWindowEnd = end;
minWindowLen = windowLen;
} // end if
} // end if
} // end for
//seeting end limit.
if(count == tLen){
while(1){
if (needToFind[S[end]] == 0) end--;
else break;
}//while
cout<<begin<<"-"<<end<<endl;
return true;
}//if
return false;
}
int main() {
// your code goes here
int begin=0, end=0;
cout<<minWindow("this is a test string","tst",begin, end);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y3N0cmluZz4KI2RlZmluZSBJTlRfTUFYIDEwMDAwCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpib29sIG1pbldpbmRvdyhjb25zdCBjaGFyKiBTLCBjb25zdCBjaGFyICpULCBpbnQgJm1pbldpbmRvd0JlZ2luLCBpbnQgJm1pbldpbmRvd0VuZCkgewogIGludCBzTGVuID0gc3RybGVuKFMpOwogIGludCB0TGVuID0gc3RybGVuKFQpOwogIGludCBuZWVkVG9GaW5kWzI1Nl0gPSB7MH07CiAKICBmb3IgKGludCBpID0gMDsgaSA8IHRMZW47IGkrKykKICAgIG5lZWRUb0ZpbmRbVFtpXV0rKzsKIAogIGludCBoYXNGb3VuZFsyNTZdID0gezB9OwogIGludCBtaW5XaW5kb3dMZW4gPSBJTlRfTUFYOwogIGludCBjb3VudCA9IDA7CiAgaW50IGJlZ2luLGVuZCx3aW5kb3dMZW47CiAgZm9yIChiZWdpbiA9IDAsIGVuZCA9IDA7IGVuZCA8IHNMZW47IGVuZCsrKSB7CgogICAgaWYgKG5lZWRUb0ZpbmRbU1tlbmRdXSA9PSAwKSBjb250aW51ZTsKICAgIGhhc0ZvdW5kW1NbZW5kXV0rKzsKICAgIGlmIChoYXNGb3VuZFtTW2VuZF1dIDw9IG5lZWRUb0ZpbmRbU1tlbmRdXSkKICAgICAgY291bnQrKzsKIAoKICAgIGlmIChjb3VudCA9PSB0TGVuKSB7CgogICAgICB3aGlsZSAobmVlZFRvRmluZFtTW2JlZ2luXV0gPT0gMCB8fCBoYXNGb3VuZFtTW2JlZ2luXV0gPiBuZWVkVG9GaW5kW1NbYmVnaW5dXSkgewogICAgICAgIGlmIChoYXNGb3VuZFtTW2JlZ2luXV0gPiBuZWVkVG9GaW5kW1NbYmVnaW5dXSkKICAgICAgICAgIGhhc0ZvdW5kW1NbYmVnaW5dXS0tOwogICAgICAgIGJlZ2luKys7CiAgICAgIH0KIAogICAgICB3aW5kb3dMZW4gPSBlbmQgLSBiZWdpbiArIDE7CiAgICAgIC8vY291dDw8d2luZG93TGVuPDxlbmRsOwogICAgICBpZiAod2luZG93TGVuIDwgbWluV2luZG93TGVuKSB7CiAgICAgICAgbWluV2luZG93QmVnaW4gPSBiZWdpbjsKICAgICAgICBtaW5XaW5kb3dFbmQgPSBlbmQ7CiAgICAgICAgbWluV2luZG93TGVuID0gd2luZG93TGVuOwogICAgICB9IC8vIGVuZCBpZgogICAgfSAvLyBlbmQgaWYKICB9IC8vIGVuZCBmb3IKICAKICAvL3NlZXRpbmcgZW5kIGxpbWl0LgogIGlmKGNvdW50ID09IHRMZW4pewogIHdoaWxlKDEpewogIAlpZiAobmVlZFRvRmluZFtTW2VuZF1dID09IDApIGVuZC0tOwogIAllbHNlIGJyZWFrOwogIH0vL3doaWxlCmNvdXQ8PGJlZ2luPDwiLSI8PGVuZDw8ZW5kbDsKcmV0dXJuIHRydWU7Cn0vL2lmCiAgCnJldHVybiBmYWxzZTsKIAp9CmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJaW50IGJlZ2luPTAsIGVuZD0wOwoJY291dDw8bWluV2luZG93KCJ0aGlzIGlzIGEgdGVzdCBzdHJpbmciLCJ0c3QiLGJlZ2luLCBlbmQpOwoJcmV0dXJuIDA7Cn0=