poj2752 kmp 模板题


#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
int f[401000], len;
char s1[401000];
void getfail()
{
    f[0] = f[1] = 0;


    for(int i = 1; i < len; i++)
    {
        int j = f[i];
        while(j && s1[j] != s1[i])
        {
            j = f[j];
        }
        f[i + 1] = s1[i] == s1[j] ? j + 1 : 0;
    }
}
void digui(int len)
{
    if(len == 0)
    {
        return;
    }
    digui(f[len]);
   printf("%d ", len);
}
int main()
{
    while(scanf("%s", s1) != EOF)
    {
        len = strlen(s1);
        getfail();
        digui(len);
        printf("\n");
    }
}

猜你喜欢

转载自blog.csdn.net/qq_30727593/article/details/51038541