自己的代码一直没过,下面是转载他人Blog的代码:
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
using namespace std;
const int maxn = 100005;
char p[maxn];
int suffix[maxn];
int main()
{
int n;
cin >> n;
for (int t = 0; t < n; ++t)
{
scanf ("%s", p);
getchar();
int m = strlen(p);
suffix[0] = -1;
suffix[1] = 0;
int k = 0;
for (int i = 2; i <= m; ++i)
{
while (k >= 0 && p[k] != p[i-1])
{
k = suffix[k];
}
suffix[i] = ++k;
}
int min;
min = m - suffix[m];
if (min == m)
{
cout << m << endl;
}
else if (m % min == 0)
{
cout << "0" << endl;
}
else
{
cout << min - (m % min) << endl;
}
}
return 0;
}
转载自: http://wangbo2012216.blog.163.com/blog/static/20342511120128144301500/