如题:http://poj.org/problem?id=2752
要求输入一个字符串,求出字符串中前n个字符和后n个字符完全相等,输出n
前缀字符串=后缀字符串 想到KMP算法中的next数组,next数组的意义:前next[i]个字符=后next[i]个字符,所以从字符串尾部往前递归,直到next[i]=0 依次输出
#include<iostream>
#include<cstring>
using namespace std;
#define N 20
int l;
int next[N];
char b[N];
void build_next()
{
int i,j=0;
next[1]=0;
for(i=2;i<=l;i++)
{
while(j>0&&b[j+1]!=b[i])
j=next[j];
if(b[j+1]==b[i])
j++;
next[i]=j;
}
}
void output(int x)
{
if(!next[x])
{
printf("%d ",x);
return;
}
output(next[x]);
printf("%d ",x);
}
int main()
{
while(scanf("%s",b+1)!=EOF)
{
memset(next,0,sizeof(next));
l=strlen(b+1);
build_next();
output(l);
printf("\n");
}
return 0;
}