Місцеві періоди
Візьміть не порожній рядок s . Локальний період з S в індексі я це найменше натуральне число п таке , що для кожного 0 ≤ до <п , ми маємо з [I + K] = s [я-п + K] всякий раз , коли обидві сторони визначено. З іншого боку , це мінімальна довжина непорожній рядки ж таке , що якщо конкатенація WW стоїть поруч з так , що другий примірник ш починається з індексу я в с , то два рядки погоджуються , де вони перекриваються.
Як приклад, давайте обчислимо локальний період s = "abaabbab" за (на основі 0) індексом 2.
- Спробуйте 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 .