Ques:period
如果一个字符串S是由一个字符串T重复K次形成的,则称T是S的循环元。使K最大的字符串T称为S的最小循环元,此时的K称为最大循环次数。
现给一个给定长度为N的字符串S,对S的每一个前缀S[1~i],如果它的最大循环次数大于1,则输出该前缀的最小循环元长度和最大循环次数。
Solution
首先,我们可以利用KMP最每一个字符串进行自我匹配求解对应的next数组,而其含义就是最长的相同前缀和后缀的长度。
通过一系列的计算(或者说是找规律),可以发现对于长度为i的序列:
- 这一个最小循环元的长度是 i / ( i − n e x t [ i ] ) i/(i-next[i]) i/(i−next[i]).
- 如果需要用整的循环元拼凑的话还需要满足 i m o d ( i − n