Позвольте мне вызвать «abbc» генератор в вашем примере - то есть строку, которую вы повторяете, чтобы получить большую строку.
Самое первое наблюдение состоит в том, что меньшая строка должна быть сделана повторением некоторой подстроки дважды.
Понятно, что наименьшая строка должна быть меньше генератора, повторяемого дважды (генератор 2 *), потому что генератор 2 * циклический.
Теперь обратите внимание, что вам нужно учитывать только строку, полученную при взятии генератора 3 раза, при поиске циклической строки меньшего размера. Действительно, если самого маленького нет, но оно есть в генераторе 4 *, то оно должно охватывать как минимум два генератора, но тогда оно не будет самым маленьким.
Итак, теперь давайте предположим, что большая строка - генератор 3 * (или генератор 2 *).
Также ясно, что если генератор имеет только разные цифры, то ответ - генератор 2 *. Если нет, то вам просто нужно найти все пары одинаковых символов в большей строке, скажем, в позициях i и j и проверить, является ли строка, начинающаяся с i, длиной 2 * (j-i), циклической. Если вы попробуете их в порядке увеличения j-i, вы можете остановиться после первого успеха.