摘要:
记住KMP是多计算一位的。其中next[i]为不为自身的最大首尾重复子串长度。 位移j=i-next[i]可以看作是构成字符串s的字串(如果i%j==0,存在这样的构成),相应的重复次数也就是n/d。 a b c d *next:-1 0 0 0 0 这时j=i-next[i]; 结果是j==i;于是得到i/j=1. a b c a *next:-1 0 0 0 1 这时j=i-next[i]; 结果是i%j!=0.但是结果还是1。所以这题要考虑如果i%j!=0时也要输出1.即自身。这只是字串等于自身的一种情况。上面的那种情况也是一种#include <iostream>#incl 阅读全文
摘要:
这题可以加深对KMP的理解! 题意:给出一个字符串,对于它的每个(each)前缀(prefix)长度 i(2<=i),求能由一个子串构成这个前缀的最大字串数目。看例子比较清楚些吧。我是看别人的才知道的。具体看以参考:http://jovesky.info/blog/2011/08/25/poj-1961-period-c-language-version/例子:字符串为aabaabaabaab前2位也就是aa是a重复2次前6位也就是aabaab是aab重复2次前9位也就是aabaabaab是aab重复3次前12位也就是aabaabaabaab是aab重复4次解题思路:通过KMP的get_ 阅读全文