W. Rytter 에 의한 문자열의 런 수 에서 가져온 다음 정의를 고려하십시오 . 단어, 문자열 및 하위 문자열은 모두 대략 동의어입니다.
문자열에서 실행은 문자열에서 확장 불가능한 (최소 동일한 기간으로)주기 세그먼트입니다.
단어 w의주기 p는이 방정식의 양변이 정의 될 때마다 w [i] = w [i + p]가되도록 임의의 양의 정수 p이다. per (w)가 w의 가장 작은주기의 크기를 나타냅니다. 단어 w는 per (w) <= | w | / 2이다.
예를 들어 string을 고려하십시오 x = abcab
. per(abcab) = 3
로 x[1] = x[1+3] = a
, x[2]=x[2+3] = b
더 작은 기간이 없습니다. 따라서 문자열 abcab
은 주기적이 아닙니다. 그러나 문자열 abab
은 per (abab) = 2로 주기적입니다.
문자열 w에서 런 (또는 최대 주기성)은 j> = i 인 간격 [i ... j]입니다.
- 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의 런 집합을 나타냅니다.
예
4 개의 실행 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] = aacaaca.
결과는 런 목록이어야합니다. 각 실행은 그것이 나타내는 간격을 지정해야하지만 부분 문자열 자체를 출력 할 필요는 없습니다. 정확한 형식은 편리한 것이 될 수 있습니다.
예제는 1- 인덱싱을 사용하지만보다 편리한 경우 0- 인덱싱을 자유롭게 사용할 수 있습니다.
직무
문자열 w, 출력 RUNS (w)를 제공 한 코드를 작성하십시오.
언어와 입력
원하는 언어를 사용하고 가장 편리한 형식으로 입력 문자열을 사용할 수 있습니다. 그러나 전체 프로그램을 제공해야하며 예제 입력에서 실행되는 코드 예제를 보여 주어야합니다.
class A{public static ...}
골프 코드 를 작성 하고 싶을 때마다 작성해야한다면 Java에서 골프를 치지 않을 것입니다.