请考虑以下W. Rytter 摘自字符串运行次数的定义。请注意,单词,字符串和子字符串大致都是同义词。
字符串中的游程是字符串中不可扩展的(具有相同的最小周期)周期段。
单词w的周期p是任何正整数p,因此只要定义了该方程式的两边,w [i] = w [i + p]。令per(w)表示w的最小周期的大小。我们说单词w是周期iff per(w)<= | w | / 2。
例如,考虑字符串x = abcab
。per(abcab) = 3
作为x[1] = x[1+3] = a
,x[2]=x[2+3] = b
并且没有更短的期限。abcab
因此,该字符串不是周期性的。但是,该字符串abab
是周期性的per(abab)= 2。
字符串w中的游程(或最大周期性)是一个区间[i ... j],其中j> = i,使得
- 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的行程集。
例子
的四次运行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 高尔夫