typedef struct {
const char \*start;
size\_t len;
}Substring;
Substring longestSubstring(const char \*s){
Substring ret = {s, 1};
Substring cur = {s, 1};
size\_t i, len = strlen(s);
const char \*p = NULL;
for(i = 1; i < len; ++i){
p = memchr(cur.start, s\[i\], cur.len);
if(p){
if(cur.len > ret.len)
ret = cur;
cur.len -= (p - cur.start) + 1;
cur.start = p + 1;
}
cur.len++;
}
if(cur.len > ret.len)
ret = cur;
return ret;
}
int main(){
char s\[64\];
scanf("%s", s);
Substring sub = longestSubstring(s);
((char \*)sub.start)\[sub.len\] = '\\0';
printf("%s\\n", sub.start);
return 0;
}
See also