求最少加几个字符使字符串成周期串
len-next[len]周期串最小周期的长度
#include<stdio.h> #include<string.h> int next[1000010]; char s[1000010]; void get() { int i,j,len; next[1]=0; j=0; len=strlen(s+1); for(i=2;i<=len;i++) { while(j>0&&s[i]!=s[j+1])j=next[j]; if(s[i]==s[j+1]) j++; next[i]=j; } } int main() { int t,len; scanf("%d",&t); while(t--) { scanf("%s",s+1); len=strlen(s+1); get(); if(next[len]==0)printf("%d\n",len); else if(len%(len-next[len])==0)printf("0\n"); else printf("%d\n",len-next[len]-len%(len-next[len])); } return 0; }