H

题目链接http://poj.org/problem?id=2752

题意:

给你一个字符串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("
");
    }
}
原文地址:https://www.cnblogs.com/dchnzlh/p/10427321.html