对next[]数组的理解。用cin结果WA了很多次,改成scanf就对了。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int MAX = 1e5 + 5;
char arr1[MAX], arr2[MAX];
int nex[MAX];
void get_next(char* p, int* nex)
{
int lenth = strlen(p);
int j = 0, k = -1;
nex[j] = k;
while (j < lenth)
{
if (k == -1 || p[j] == p[k])
{
++k;
++j;
if (p[k] == p[j])
nex[j] = nex[k];
else
nex[j] = k;
}
else
k = nex[k];
}
}
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
memset(nex, 0, sizeof(nex));
scanf("%s\n", arr1);
get_next(arr1, nex);
int lenth = strlen(arr1);
if (nex[lenth] == 0)
printf("%d\n", lenth);
else if ( lenth % (lenth - nex[lenth]) == 0)
printf("0\n");
else
printf("%d\n", lenth - nex[lenth] - lenth % (lenth - nex[lenth]));
}
return 0;
}