zoukankan      html  css  js  c++  java
  • POJ 2752 Seek the Name, Seek the Fame

    POJ_2752

        将字符串对自己进行KMP匹配即可,也即进行一般的KMP问题的预处理的步骤。之后去找恰好匹配到最后一个字符的所有可能的前缀的长度即可,也就是遍历一遍P[N],其中N为字符串的长度。

    #include<stdio.h>
    #include<string.h>
    #define MAXD 400010
    char b[MAXD];
    int P[MAXD];
    void printresult(int k)
    {
    if(P[k] == 0)
    printf("%d", k);
    else
    {
    printresult(P[k]);
    printf(" %d", k);
    }
    }
    void solve()
    {
    int i, j, k;
    P[1] = j = 0;
    for(i = 2; b[i]; i ++)
    {
    while(j > 0 && b[j + 1] != b[i])
    j = P[j];
    if(b[j + 1] == b[i])
    ++ j;
    P[i] = j;
    }
    printresult(i - 1);
    printf("\n");
    }
    int main()
    {
    while(scanf("%s", b + 1) == 1)
    {
    solve();
    }
    return 0;
    }


  • 相关阅读:
    策略模式
    模板方法模式

    kafka
    Linux下部署MongoDB
    Linux下安装ssdb
    ssdb常用知识点
    Eclipse 的 Java Web 项目环境搭建
    PLSQL连接Oracle
    redis书籍
  • 原文地址:https://www.cnblogs.com/staginner/p/2321149.html
Copyright © 2011-2022 走看看