POJ-2752 Seek the Name, Seek the Fame 字符串问题 KMP算法 求前后缀串相同数木

Posted tanglizi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ-2752 Seek the Name, Seek the Fame 字符串问题 KMP算法 求前后缀串相同数木相关的知识,希望对你有一定的参考价值。

题目链接:https://cn.vjudge.net/problem/POJ-2752

题意

给一个字符串,求前缀串跟后缀串相同的前缀串的个数
例:alala
输出:a, ala, alala

思路

仔细想想,fail[len]的返回值其实就是匹配成功的最大后缀串
得到这个后缀串后,比这个串更小的串一定还是被包含在这个新的后缀串中
迭代即可

提交过程

AC

代码

#include <cstring>
#include <cstdio>
const int maxm=4e5+20;
char P[maxm];
int fail[maxm];
void getFail(int m){
    fail[0]=fail[1]=0;
    for (int i=1; i<m; i++){
        int j=fail[i];
        while (j && P[j]!=P[i]) j=fail[j];
        fail[i+1]=((P[i]==P[j])?j+1:0);
    }
}

int main(void){
    int len, ans[maxm], kase=0;
    while (scanf("%s", P)==1 && !(P[0]==‘.‘ && !P[1])){
        getFail(len=strlen(P));

        int size=len, ptr=1; ans[0]=len;
        while (size>0)
            ans[ptr++]=(size=fail[size]);
        for (int i=ptr-2; i>=0; i--)
            printf("%d%c", ans[i], "
 "[!!i]);
    }

    return 0;
}
Time Memory Length Lang Submitted
485ms 3840kB 547 G++ 2018-08-02 11:27:13




以上是关于POJ-2752 Seek the Name, Seek the Fame 字符串问题 KMP算法 求前后缀串相同数木的主要内容,如果未能解决你的问题,请参考以下文章

POJ 2752 Seek the Name, Seek the Fame(KMP求公共前后缀)

POJ 2752 Seek the Name, Seek the Fame

POJ2752 Seek the Name, Seek the Fame

POJ 2752 Seek the Name, Seek the Fame

poj2752 Seek the Name, Seek the Fame

poj 2752 Seek the Name, Seek the Fame