#include
using namespace std;
string find2char(const string & s){
size_t size = s.size();
if(size <= 2) return s.substr(0, size);
vector index(256, -1);
int maxlen = 1, len, p1 = 0, p2 = 0, pm_begin = 0;
index[s[0]] = 0;
for(int i=1; i < size; ++i){
if(index[s[i]] >= 0){
index[s[i]] = i;
continue;
}
index[s[i]] = i;
p2 = i;
break;
}
if(p2 == 0) return s.substr(pm_begin, size);
maxlen = p2 - p1 + 1;
len = p2 - p1 + 1;
for(int i = p2 + 1; i < size; ++i){
if(index[s[i]]>=0){
index[s[i]] = i;
++len;
continue;
}
if(len > maxlen){
maxlen = len;
pm_begin = p1;
}
if(index[s[p1]] > index[s[p2]]){
int temp = index[s[p2]];
index[s[p2]] = -1;
p1 = temp + 1;
}
else{
int temp = index[s[p1]];
index[s[p1]] = -1;
p1 = temp + 1;
}
p2 = i;
index[s[i]] = i;
len = p2 - p1 + 1;
}
if(len > maxlen){
maxlen = len;
pm_begin = p1;
}
return s.substr(pm_begin, maxlen);
}
int main() {
// Start typing your code here...
string s ( "abaaabcccccaaaccccdd");
cout << find2char(s) << endl;
return 0;
}