It might even be easier than this ... *(pseudocode this time)*

`for $t from 1 to int(length(string) / 2):
next unless the first $t chars equal the last $t;
# i.e. "$t" must be a plausible tail-size.
$r = length - $t;
$incr = int($r / 2);
while( $incr > 0) {
next unless ($incr % $r == 0);
# i.e. must be a possible repeated-block size in this space
solution is found if string(0, $incr) eq string($incr, $incr);
# i.e. if we find one repetition then it must be the answer.
$incr--;
}
}
`

As before, start by looking for a tail. If you think you found one, look for repetitions in possibly-sized increments of the remaining string.
This approach will consider all successively-larger candidates for the "tail," up to and including the largest tail, which is "half of it." For each tail-size, it looks for one repetition of all possible sizes which would fit evenly within this area, knowing that the left-hand portion is defined to consist only of repetitions. Continue for all tail-sizes, and for each of these, all rep-sizes, until the first success is found.
It works only for data which does, in fact, match this assertion.

Comment onRe^2: Finding repeat sequences.DownloadCode