poj2406

这个题就是用KMP算法的next数组求最小重复子串长度;这与我刚刚做的2185是一个思路;

我也是应为理解那个题的解法才做这题;

但是我到现在还是没有对算法正确性有很好的认识;

姑且但结论记吧:

对于代码中i-next[i]代表了字符串最小前缀且满足能不但的复制得到

原字符串;len%(i-next[i])==0时代表字符串刚刚是子串的整数倍;

 

若len%(i-next[i])==0匹配时每一次移动的距离i-next[i]是相等的,若不等则只有最后一次不等;

 

 

 

 

 

 

#include #include #include using namespace std; int len; int next[1000005]; char s[1000005]; int kmp_next() { int i=0,j=-1; next[0]=-1; while(i

你可能感兴趣的:(acm---字符串,算法)