#include <stdio.h>
void printSubstring(char *start, int len) {
char *p = start;
while (len--) {
p++;
}
}
char* longestUniqueSubstring(char *s, int *outLen) {
char *start = s;
char *end = s;
char *bestStart = s;
int bestLen = 0;
while (*end != '\0') {
// check duplicate of *end in [start, end)
char *p = start;
while (p < end) {
if (*p == *end) {
// move start just after previous occurrence
start = p + 1;
break;
}
p++;
}
int len = (end - start) + 1;
if (len > bestLen) {
bestLen = len;
bestStart = start;
}
end++;
}
*outLen = bestLen;
return bestStart;
}
int main() {
char str[] = "abcab p q r pqbcbb";
int len = 0;
char *res = longestUniqueSubstring(str, &len);
printf("Longest substring = "); printSubstring(res, len);
return 0;
}
CiNpbmNsdWRlIDxzdGRpby5oPgoKdm9pZCBwcmludFN1YnN0cmluZyhjaGFyICpzdGFydCwgaW50IGxlbikgewogICAgY2hhciAqcCA9IHN0YXJ0OwogICAgd2hpbGUgKGxlbi0tKSB7CiAgICAgICAgcHV0Y2hhcigqcCk7CiAgICAgICAgcCsrOwogICAgfQogICAgcHV0Y2hhcignXG4nKTsKfQoKY2hhciogbG9uZ2VzdFVuaXF1ZVN1YnN0cmluZyhjaGFyICpzLCBpbnQgKm91dExlbikgewogICAgY2hhciAqc3RhcnQgPSBzOwogICAgY2hhciAqZW5kID0gczsKCiAgICBjaGFyICpiZXN0U3RhcnQgPSBzOwogICAgaW50IGJlc3RMZW4gPSAwOwoKICAgIHdoaWxlICgqZW5kICE9ICdcMCcpIHsKCiAgICAgICAgLy8gY2hlY2sgZHVwbGljYXRlIG9mICplbmQgaW4gW3N0YXJ0LCBlbmQpCiAgICAgICAgY2hhciAqcCA9IHN0YXJ0OwogICAgICAgIHdoaWxlIChwIDwgZW5kKSB7CiAgICAgICAgICAgIGlmICgqcCA9PSAqZW5kKSB7CiAgICAgICAgICAgICAgICAvLyBtb3ZlIHN0YXJ0IGp1c3QgYWZ0ZXIgcHJldmlvdXMgb2NjdXJyZW5jZQogICAgICAgICAgICAgICAgc3RhcnQgPSBwICsgMTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHArKzsKICAgICAgICB9CgogICAgICAgIGludCBsZW4gPSAoZW5kIC0gc3RhcnQpICsgMTsKICAgICAgICBpZiAobGVuID4gYmVzdExlbikgewogICAgICAgICAgICBiZXN0TGVuID0gbGVuOwogICAgICAgICAgICBiZXN0U3RhcnQgPSBzdGFydDsKICAgICAgICB9CgogICAgICAgIGVuZCsrOwogICAgfQoKICAgICpvdXRMZW4gPSBiZXN0TGVuOwogICAgcmV0dXJuIGJlc3RTdGFydDsKfQoKaW50IG1haW4oKSB7CiAgICBjaGFyIHN0cltdID0gImFiY2FiIHAgcSByIHBxYmNiYiI7CgogICAgaW50IGxlbiA9IDA7CiAgICBjaGFyICpyZXMgPSBsb25nZXN0VW5pcXVlU3Vic3RyaW5nKHN0ciwgJmxlbik7CgogICAgcHJpbnRmKCJMb25nZXN0IHN1YnN0cmluZyA9ICIpOwogICAgcHJpbnRTdWJzdHJpbmcocmVzLCBsZW4pOwoKICAgIHJldHVybiAwOwp9