#include <iostream>
#include <string>
#include <vector>
using namespace std;
string longestSubstring(string s) {
int n = s.length();
int i = 0, j = 0;
string maxStr;
vector<bool> exist(256);
while (j < n) {
if (exist[s[j]]) {
if (maxStr.length() < (j-i)) {
maxStr = s.substr(i, j-i);
}
while (s[i] != s[j]) {
exist[s[i]] = false;
i++;
}
i++;
j++;
} else {
exist[s[j]] = true;
j++;
}
}
if (maxStr.length() < (n-i)) {
maxStr = s.substr(i, n-i);
}
return maxStr;
}
int main() {
cout << longestSubstring("abcaadafghae") << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RyaW5nIGxvbmdlc3RTdWJzdHJpbmcoc3RyaW5nIHMpIHsKICBpbnQgbiA9IHMubGVuZ3RoKCk7CiAgaW50IGkgPSAwLCBqID0gMDsKICBzdHJpbmcgbWF4U3RyOwogIHZlY3Rvcjxib29sPiBleGlzdCgyNTYpOwogIHdoaWxlIChqIDwgbikgewogICAgaWYgKGV4aXN0W3Nbal1dKSB7CiAgICAJaWYgKG1heFN0ci5sZW5ndGgoKSA8IChqLWkpKSB7CiAgICAJCW1heFN0ciA9IHMuc3Vic3RyKGksIGotaSk7CiAgICAJfQogICAgICB3aGlsZSAoc1tpXSAhPSBzW2pdKSB7CiAgICAgICAgZXhpc3Rbc1tpXV0gPSBmYWxzZTsKICAgICAgICBpKys7CiAgICAgIH0KICAgICAgaSsrOwogICAgICBqKys7CiAgICB9IGVsc2UgewogICAgICBleGlzdFtzW2pdXSA9IHRydWU7CiAgICAgIGorKzsKICAgIH0KICB9CiAgICBpZiAobWF4U3RyLmxlbmd0aCgpIDwgKG4taSkpIHsKICAgCQltYXhTdHIgPSBzLnN1YnN0cihpLCBuLWkpOwogICAJfQogIHJldHVybiBtYXhTdHI7Cn0KCmludCBtYWluKCkgewoJY291dCA8PCBsb25nZXN0U3Vic3RyaW5nKCJhYmNhYWRhZmdoYWUiKSA8PCBlbmRsOwoJcmV0dXJuIDA7Cn0=