>>101562719
so make it fun
int is_substring(const char *check, const char *string)
{
const char *p, *q, **pp = malloc(strlen(check) * sizeof(const char *));
for (p = check, q = check + 1, *pp = NULL; *p && *q; q++) {
if (*p == *q)
pp[q - check] = pp[p - check];
else
pp[q - check] = p;
while (p && *p != *q)
p = pp[p - check];
if (!p)
p = check;
else
p++;
}
for (p = string, q = check; *p && *q; p++, q++) {
if (*p == *q)
continue;
if (!(q = pp[q - check]))
q = check;
else
--p, --q;
}
free(pp);
return !*q;
}