Рассмотрим следующие определения, взятые из «Количество прогонов в строке » У. Риттера. Обратите внимание, что слово, строка и подстрока являются примерно синонимами.
Прогон в строке - это нерасширяемый (с тем же минимальным периодом) периодический сегмент в строке.
Период p слова w - это любое положительное целое число p, такое что w [i] = w [i + p] всякий раз, когда определены обе стороны этого уравнения. Пусть per (w) обозначает размер наименьшего периода w. Мы говорим, что слово w периодично тогда и только тогда, когда per (w) <= | w | / 2.
Для примера рассмотрим строку x = abcab. per(abcab) = 3как x[1] = x[1+3] = a, x[2]=x[2+3] = bи нет меньшего периода. Поэтому строка не abcabявляется периодической. Однако строка ababявляется периодической согласно (abab) = 2.
Прогон (или максимальная периодичность) в строке w - это интервал [i ... j] с j> = i, такой что
- w [i ... j] - периодическое слово с периодом p = per (w [i ... j])
- Это максимально. Формально, ни w [i-1] = w [i-1 + p], ни w [j + 1] = w [j + 1-p]. Неофициально прогон не может содержаться в большем прогоне с тем же периодом.
Обозначим через RUNS (w) множество прогонов w.
Примеры
Четыре серии atattatt: [4,5] = tt, [7,8] = tt, [1,4] = atat, [2,8] = tattatt.
Строка aabaabaaaacaacacсодержит следующие 7 прогонов:
[1,2] = aa, [4,5] = aa, [7,10] = aaaa, [12,13] = aa, [13,16] = acac, [1,8] = aabaabaa, [9 , 15] = аакаака.
Ваш вывод должен быть список прогонов. Каждый прогон должен указывать интервал, который он представляет, но не должен выводить саму подстроку. Точное форматирование может быть любым удобным для вас.
В примерах используется 1-индексация, но вы можете использовать 0-индексацию, если это более удобно.
ЗАДАЧА
Напишите код, который содержит строку w, выведите RUNS (w).
Языки и ввод
Вы можете использовать любой язык, который вам нравится, и принимать строку ввода в любой удобной для вас форме. Тем не менее, вы должны предоставить полную программу, и вы должны показать пример вашего кода, запущенного на примере ввода.
class A{public static ...}каждый раз, когда я хотел написать код для гольфа