題意:求既是字首又是字尾的字首的可能的長度
忙著考試,好幾天沒做題了,今天做了幾道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);
}
}