对于样例,我们可以利用"abc"不断自我连接得到"abcabcabc",读入的cabcabca,是它的子串
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define N 1000003 using namespace std; char s[N]; int t[N],n,m; void calc() { t[0]=-1; int j; for (int i=0;i<n;i++) { j=t[i]; while (j!=-1&&s[j]!=s[i]) j=t[j]; t[i+1]=++j; } } int main() { scanf("%d",&n); scanf("%s",s); calc(); printf("%d\n",n-t[n]); }