Here is my own un-golfed answer in C for testing.
#include <stdio.h>
#include <string.h>
#include <assert.h>
int tailrep(char *str, char *sub, int sublen, int len) {
if (str == sub) {
return 1;
}
int i;
for (i = 0; i < sublen; i++) {
char *a, *b;
a = str + len - sublen;
b = sub + sublen - 1;
// printf("%p->%c %p->%c\n", a - i, a[-i], b - i, b[-i]);
if (a[-i] != b[-i]) {
return 0;
}
}
return tailrep(str, sub - sublen - 1, sublen + 1, len - sublen);
}
int istailrep(char *str) {
int len = strlen(str);
if (len < 3) {
return 0;
}
return tailrep(str, str + len - 1, 1, len - 1);
}
int main() {
// must be false
assert(!istailrep(""));
assert(!istailrep("a"));
assert(!istailrep("aa"));
assert(!istailrep("aab"));
assert(!istailrep("abcbbc"));
assert(!istailrep("abcdabcdabcd"));
// must be true
assert(istailrep("aaa"));
assert(istailrep("abb"));
assert(istailrep("abcbcc"));
assert(istailrep("abcdbcdcdd"));
assert(istailrep("abcdebcdecdedee"));
printf("yay\n");
return 0;
}