文字列を指定します.重複文字が含まれていない長男の列の長さを見つけてください.


#define MAX(a, b)	((a) > (b) ? (a) : (b))

int longest_substr(char *s) {
    int c[128] = {0};
    int longest_len = 0;
    int i = 0;
    int prev = 0;
    while (s[i] != 0) {
        int k = c[s[i]];
        if (k >= prev && k != 0) {
            if (i - prev > longest_len) {
                longest_len = i - prev;
            }
            prev = k;
        }
        c[s[i]] = i + 1;
        i += 1;
    }
    return MAX(longest_len, i - prev);
}