Учитывая следующую задачу:Найдите наименьший период ввода строки в O (n)?
Определение:
Пусть S будет строкой в алфавите Е.
S'
это наименьший периодS
, еслиS'
является самым маленьким, так что строка:
S = (S')^k (S'')
,, где
S''
является префиксомS
. Если такойS'
не существует, тоS
является не периодическим.Пример:
S = abcabcabcabca
. Затемabcabc
является периодом сS = abcabc abcabc a
, но наименьший период составляетabc
сS = abc abc abc abc a
.Дайте алгоритму, чтобы найти наименьший период ввода строки
S
или , заявить, чтоS
не является периодическим.Подсказка: Вы можете сделать это в
O(n)
...
Мое решение: Мы используем KMP, который работает в O (N).
По определению проблемы S = (S ')^k (S' '), то я думаю, что если мы создадим автоматы за самый короткий период и найдем способ найти этот самый короткий период, то я закончен.
Проблема заключается в том, где поставить FAIL стрелка автоматов ...
Любые идеи, было бы весьма признателен,
С уважением
Не было бы 'S = (S '') (S ')^k', если' S''' является префиксом, или это обозначение, добавленное к фронту? – Mikeb
@Mikeb: Нет, посмотрите на пример: здесь 'S = abcabcabcabca',' S '= abc' и 'S' '= a' ..., так как' S''' является последним символом. – ron
, так что если 'S = qweabcabcabc', строка не является периодической? Угадайте, что у меня просто языковой каламбур, в вашем примере я бы назвал 'S''' суффикс. – Mikeb