题目链接:http://acm.hust.edu.cn/problem/show/1010
KMP的nex数组。
1 #include<cstdio> 2 #include<cstring> 3 const int maxn=1000010; 4 char s[maxn]; 5 int nex[maxn]; 6 7 int n; 8 9 void getnex() 10 { 11 n=strlen(s); 12 int i=0,j=-1; 13 nex[0]=-1; 14 while(i<n) 15 { 16 if(j==-1||s[i]==s[j]) 17 nex[++i]=++j; 18 else j=nex[j]; 19 } 20 } 21 22 int main() 23 { 24 while(scanf("%s",s)!=EOF) 25 { 26 getnex(); 27 printf("%d ",n-nex[n]); 28 } 29 }