http://acm.hdu.edu.cn/showproblem.php?pid=3746
题意:给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数。 例子: abcabc 已经循环2次,添加数为0 abcac 没有循环2次,添加字符abcac。数目为5. a
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
const int maxn=100009;
char s[maxn];
int next[maxn];
int len;
void getnext()
{
int i,j;
len=strlen(s);
i=0;j=-1;
next[0]=-1;
while(i<len)
{
if(j==-1||s[i]==s[j])next[++i]=++j;
else j=next[j];
}
}
int main()
{
int i,j,t;
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
getnext();
j=next[len];
if(j==0)printf("%d\n",len);
else
{
if(len%(len-j)==0)printf("0\n");
else
printf("%d\n",len-j-len%(len-j));
}
}
return 0;
}
bcabcab 已经循环过2次,但第三次不完整,需要添加数为1 ;