Местные периоды
Возьмите непустую строку s . Локальный период из S в индексе я это наименьшее натуральное число п такое , что для каждого 0 ≤ к <п , мы имеем с [I + K] = s [я-п + K] всякий раз , когда обе стороны определены. С другой стороны , это минимальная длина непустой строки ж такое , что если конкатенация WW стоит рядом с так , что второй экземпляр ш начинается с индекса я в с , то две строки соглашаются , где они перекрываются.
В качестве примера давайте вычислим локальный период s = "abaabbab" с индексом 2 (на основе 0).
- Попробуйте n = 1 : тогда s [2 + 0] ≠ s [2-1 + 0] , поэтому этот выбор не верен.
- Попробуйте n = 2 : тогда s [2 + 0] = s [2-2 + 0], но s [2 + 1] ≠ s [2-2 + 1] , так что это тоже не правильно.
- Попробуйте n = 3 : тогда s [2 + 0-3] не определено, s [2 + 1] = s [2-3 + 1] и s [2 + 2] = s [2-3 + 2] . Таким образом, местный период равен 3.
Вот визуализация локальных периодов с использованием второго определения, с точкой с запятой, добавленной между двумя копиями w для ясности:
index a b a a b b a b period
0 a;a 1
1 b a;b a 2
2 a a b;a a b 3
3 a;a 1
4 b b a b a a;b b a b a a 6
5 b;b 1
6 a b b;a b b 3
7 b a;b a 2
Обратите внимание, что w не обязательно является подстрокой s . Это происходит здесь, в случае индекса 4.
Задание
Ваш вклад непустой строки s из строчных символов ASCII. При желании его можно принять за список символов. Ваш вывод должен быть списком, содержащим локальный период s для каждого из его индексов. В приведенном выше примере правильный вывод будет [1,2,3,1,6,1,3,2] .
Наименьшее количество байтов в каждом языке выигрывает. Применяются стандартные правила игры в гольф .
Контрольные примеры
a -> [1]
hi -> [1, 2]
www -> [1, 1, 1]
xcxccxc -> [1, 2, 2, 5, 1, 3, 2]
abcbacb -> [1, 4, 7, 7, 7, 3, 3]
nininini -> [1, 2, 2, 2, 2, 2, 2, 2]
abaabbab -> [1, 2, 3, 1, 6, 1, 3, 2]
woppwoppw -> [1, 4, 4, 1, 4, 4, 4, 1, 4]
qwertyuiop -> [1, 10, 10, 10, 10, 10, 10, 10, 10, 10]
deededeededede -> [1, 3, 1, 5, 2, 2, 5, 1, 12, 2, 2, 2, 2, 2]
abababcabababcababcabababcaba -> [1, 2, 2, 2, 2, 7, 7, 7, 7, 2, 2, 2, 19, 19, 5, 5, 2, 5, 5, 12, 12, 2, 2, 2, 7, 7, 5, 5, 2]
;
в вашем примере). Это избавило бы от ведущих 1.
qwertyuiop
, w будет повернутой версиейqwertyuiop
. Смотрите также пример с индексом 4: w не обязательно является подстрокой s .