题意:求既是前缀又是后缀的前缀的可能的长度
忙着考试,好几天没做题了,今天做了几道KMP都是1A,但这道题Output Limit Exceeded 了一次 原因是循环输入的时候没有判断是否遇到了文件末尾
思路比较简单:一直用next下去即可 最后逆序输出
#include "iostream"
using namespace std;
#define maxsize 400010
char c[maxsize];
int next[maxsize];
int len;
int prin[maxsize];
void get_next()
{
int i=0;
int j=-1;
next[0]=-1;
while(i<len)
{
if (j==-1||c[i]==c[j])
{
i++;
j++;
next[i]=j;
}
else
{
j=next[j];
}
}
}
int main()
{
while (scanf("%s",c)!=EOF)//判断是否文件末尾
{
len=strlen(c);
get_next();
int temp=next[len];
int i=0;
while (temp!=0)
{
prin[i++]=temp;
temp=next[temp];
}
while(i--)
{
printf("%d ",prin[i]);
}
printf("%d\n",len);
}
}