1. Делим длину строки на 2 - получаем первый возможный вариант длины подстроки.
2. В цикле, потихоньку уменьшая длину подстроки, ищем
а. Возможные подстроки.
б. Частоту их появления в исходной строке (например, складывая в Map).
Пример:
Строка: aabcdaa
Шаг первый: возможная длина 7/2 -> три символа.
Шаг второй: выбираем строки по три символа -> aab, abc, bcd, daa -> нет повторений.
Шаг третий: выбираем строки по два символа -> aa, ab, bc, cd, aa -> нашлась строка aa - наиболее длинная, которая встречается 2 раза.