首页 > 其他 > 详细

POJ刷题(2406)

时间:2015-04-14 16:40:43      阅读:139      评论:0      收藏:0      [点我收藏+]

程序(已经accepted):

#include<stdio.h>
#include<string.h>
#include<memory.h>
#define N 1000010

char 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),所以程序会崩溃,因此只能做全局变量。

POJ刷题(2406)

原文:http://blog.csdn.net/xumesang/article/details/45040261

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!