#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char t[1000005];
int next[1000005];
void get_next(int n)
{
int i=0;
int k=-1;
next[0]=-1;
while(i<=n) //多算了一个next[n] n-next[n]为最小循环节;
{
if(k==-1||t[i]==t[k])
i++,k++,next[i]=k;
else
k=next[k];
}
}
int main()
{
int n1;
scanf("%d",&n1);
while(n1--)
{
scanf("%s",t);
int n;
n=strlen(t);
get_next(n);
if(n%(n-next[n])==0&&next[n]!=0)
printf("0\n");
else
{
printf("%d\n",(n-next[n])-n%(n-next[n]));
}
}
return 0;
}
hdu3746
最新推荐文章于 2021-08-23 23:45:02 发布
本文探讨了在C++程序中处理字符串时使用的一种高效算法,并通过实例展示了如何实现该算法来解决字符串匹配问题。算法的核心在于预处理字符串以减少匹配过程中的重复操作,从而提高程序运行效率。
811

被折叠的 条评论
为什么被折叠?



