현지 기간
비어 있지 않은 문자열 s를 사용하십시오 . 인덱스 i 에서 의 s 의 로컬주기 는 양의 정수 가 정의 될 때마다 각각의 0 ≤ k <n 에 대해 s [i + k] = s [i-n + k]를 갖도록 가장 작은 양의 정수 n 입니다. 대안으로, 비어 있지 않은 문자열 w 의 최소 길이 는 연결 ww 가 s 옆에 배치 되어 w 의 두 번째 사본 이 s의 인덱스 i 에서 시작 하면 두 문자열이 겹치는 위치에 일치하게됩니다.
예를 들어, (0 기반) 인덱스 2에서 s = "abaabbab"의 로컬 기간을 계산해 봅시다 .
- n = 1 : s [2 + 0] ≠ s [2-1 + 0]을 시도 하면이 선택이 올바르지 않습니다.
- 시도 N = 2 : 다음 의 [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는 반드시의 하위 아닙니다 의 . 이것은 index-4 경우에 발생합니다.
작업
귀하의 입력은 비어 있지 않은 문자열 의 소문자 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
qwertyuiop