POJ刷题(2406)

来源:互联网 发布:淘宝九块九包邮在哪 编辑:程序博客网 时间:2024/05/17 07:02

程序(已经accepted):

#include<stdio.h>#include<string.h>#include<memory.h>#define N 1000010char str[N];int next[N];int get_next(char pattern[], int next[]){    int j=0,k=-1;    int len=strlen(pattern);    next[0]=-1;    while(j<len)    {        if(k==-1||pattern[j]==pattern[k])            next[++j]=++k;        else            k=next[k];    }    j=len-k;//如果最后一个位置不匹配,那么就会滚到len-k的位置,也就是最小重复字串的长度。    if(len%j==0)        return len/j;    else        return 1;}int main(){    while(scanf("%s", str), str[0]!='.')    {        printf("%d\n", get_next(str, next));    }    return 0;}</span><strong style="font-size:18px; color: rgb(0, 0, 153);"></strong>

运行时间:



本题还是很有价值的:

1. 考察了KMP算法的灵活应用;

2. 由于1000010*4(int型)会超过栈空间(1M),所以程序会崩溃,因此只能做全局变量。

0 0