1. 程式人生 > >Seek the Name, Seek the Fame POJ

Seek the Name, Seek the Fame POJ

題意:

給你一個字串str  找到一個字串集合S  ,集合內的字串都為str的字首和字尾

思路:

如果這個字串s在這個集合的話,那麼s肯定是字串str的一個匹配(⊙﹏⊙)能理解我意思吧

So KMP模板

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#define INF 0x3f3f3f3f
using namespace std;
const int maxn=1010000;
int ans[maxn],net[maxn];
char str[maxn];
void GetNextval(char *str,int *net)
{
    net[0]=-1;
    int j=0,k=-1,len;
    len=strlen(str);
    while(j<len)
    {
        if(k==-1||str[j]==str[k])
            net[++j]=++k;
        else
            k=net[k];
    }
}
int main()
{
    int top;
    while(~scanf("%s",str))
    {
        int len=strlen(str);
        top=0;
        int k=len;
        GetNextval(str,net);
        while(k)
        {
            ans[top++]=k;
            k=net[k];
        }
        for(int i=top-1;~i;--i)
            printf("%d ",ans[i]);
        printf("\n");
    }
}