W. Rytterによる文字列の実行数から取られた以下の定義を考慮してください。単語、文字列、部分文字列はすべてほぼ同義語であることに注意してください。
文字列内の実行は、文字列内の拡張不可能な(同じ最小期間を持つ)定期的なセグメントです。
単語wの周期pは、この方程式の両側が定義されるたびにw [i] = w [i + p]となるような正の整数pです。per(w)がwの最小周期のサイズを示すものとします。per(w)<= | w | / 2の場合、単語wは周期的であると言います。
たとえば、文字列を考えます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 ...}
毎回私はゴルフのコードを望んでいた