题解
这题又是一道KMP的题目 我一直认为自己的KMP学的很好,结果碰到这题后,我才明白,我对next数组依然不了解 这题其实就是求最小循环节 void getfail() { int n=strlen(str); f[0]=f[1]=0; for (int i=1;i<n;++i) { int j=f[i]; while(j && str[j]!=str[i])j=f[j]; f[i+1]=str[i]==str[j]?1+j:0; } } 然后再输出int l=strlen(str); printf("%d\n",l-f[l]); 最主要的是一点 不能用cin,cout 我一开始超时了,当时大惊,KMP都超时,那没有办法了,可是又看看程序,发现有cin,cout于是就改成个gets(),printf(),结果过了,当时心里多不爽啊,望大家小心