长度为m[1,2...m]的模式的循环节为 m-next[m] ,

aaa  循环节clc为1  (clc=m-next[m]= 3-2  =1)       此时   m%clc == 0   表示有3个完整的循环节

ababa    循环节为2 (clc = 5-3=2)         此时   m%clc = 5%2 =1     表示有两个循环节 还余一个数  ,需添加的字符数 为  len - m%clc

abaed 循环节为 5   (clc = 5-0=5)     此时, clc = m   表示只有一个完整的循环节 ,如果至少要两个循环节的话 ,需添加的字符数 为 len

下表从1 开始的代码如下:

#include<iostream>
#include<stdio.h>
#include<string>
#include<string.h>
#define N 100005
using namespace std;
char P[N];
int m;
int next[N];
 void Prefix_Func()
 {
     int i,k;
     k=0;
     next[1]=0;
     for(i=2;i<=m;i++)
     {
        while(k>0 && P[k+1]!= P[i])
            k=next[k];
        if(P[k+1] == P[i])
            k++;
        next[i]=k;
     }
 }
int main()
{
    int t,clc;
    cin>>t;
    while(t--)
    {
        scanf("%s",P+1);
        m=strlen(P+1);
        Prefix_Func();
        clc=m-next[m];
        if(clc==m)  cout<<m<<endl;
        else if(m%clc== 0) cout<<"0"<<endl;
        else
        {
            cout<<clc-m%clc<<endl;
        }

    }
    return 0 ;
}