我已经学习了KMP算法,但未能在字符串问题中实现它。 谁能建议我如何使用KMP算法在SPOJ中完成上述问题? 链接:http://www.spoj.com/problems/PERIOD/
答案 0 :(得分:5)
假设长度为i
的前缀的前缀函数为p[i]
如果是i mod (i - p[i]) == 0
,那么K = i / (i - p[i])
其他K = 1
(证据的概念是任何时段都是最小时段的倍数,而最小时段恰好是i - p[i]
)。
因此,您可以使用KMP算法为字符串的所有前缀计算前缀函数,然后使用上面的公式。