周期( Period, SEERC 2004, LA3026)
给定一个长度为n的字符串S, 求它每个前缀的最短循环节。 换句话
说, 对于每个i( 2≤i≤n) , 求一个最大的整数K>1( 如果K存在) , 使得
S的前i个字符组成的前缀是某个字符串重复K次得到。 输出所有存在K的i
和对应的K。
比如对于字符串aabaabaabaab, 只有当i=2, 6, 9, 12时K存在, 且
分别为2, 2, 3, 4。
【 输入格式】
输入包含多组数据。 每组数据第一行为正整数n( 2≤n≤106) , 第二行
为一个字符串S。 输入结束标志为n=0。
【 输出格式】
对于每组数据, 按照从小到大的顺序输出每个i和对应的K, 一对整
数占一行。
【 分析】
如图3-22所示, 根据后缀函数的定义, “错位部分”长度为i-f[i]。