码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 2752

时间:2020-03-19 09:22:06      阅读:45      评论:0      收藏:0      [点我收藏+]

标签:cst   %s   ons   ext   putc   关于   code   void   kmp   

关于MP(非KMP)算法中出现的mpnext数组的应用

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

const int maxs= 4e5+3;

char s[maxs];
int nxt[maxs];
int ans[maxs];

void PreKmp(int l)
{
    int i= 0, j;
    j= nxt[0]= -1;

    while (i< l){
        while (j> -1 && s[i]!= s[j]){
            j= nxt[j];
        }
        nxt[++i]= ++j;
    }
}

int main()
{
    while (EOF!= scanf(" %s", s)){
        int ls= strlen(s);
        PreKmp(ls);
        int la= 0, j= ls;

        while (j> 0){
            ans[la++]= j;
            j= nxt[j];
        }
        while (la--){
            printf("%d ", ans[la]);
        }
        putchar('\n');
    }
    return 0;
}

POJ 2752

标签:cst   %s   ons   ext   putc   关于   code   void   kmp   

原文地址:https://www.cnblogs.com/Idi0t-N3/p/12522030.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!