
#include <stdio.h>

void printSubstring(char *start, int len) {
    char *p = start;
    while (len--) {
        putchar(*p);
        p++;
    }
    putchar('\n');
}

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;
}