zoukankan      html  css  js  c++  java
  • seek

    题目:

    俗话说“好命不如好名”,小h准备给他的宠物狗起个新的名字,于是他把一些英文的名字全抄下来了,写成一行长长的字符串,小h觉得一个名字如果是好名字,那么这个名字在这个串中既是前缀,又是后缀,即是这个名字从前面开始可以匹配,从后面开始也可以匹配,例如abc在 abcddabc中既是前缀,也是后缀,而ab就不是,可是长达4*10^5的字符让小h几乎昏过去了,为了给自己的小狗起个好名字,小h向你求救,并且他要求要将所有的好名字的长度都输出来。

    输入:

    一行,要处理的字符串(都是小写字母)

    输出:

    一行若干个数字,从小到大输出,表示好名字的长度

    样例:


    abcddabc

    3 8

    KMP

    求出KMP中的next数组,在求一下next[strlen(s)-1]的方案

    #include<cstdio>
    #include<cstring>
    using namespace std;
    char b[500010];
    int n,m,a[500010],f[500010],cnt=0;
    
    int main()
    {
        scanf("%s",&b);
        n=strlen(b);
        f[0]=-1;
        int j=-1;
        for (int i=1;i<=n;i++)
        {
            j=f[i-1];
            while (b[j+1]!=b[i]&&j!=-1) j=f[j];
            if (b[j+1]==b[i]) f[i]=j+1;
            else f[i]=-1;
        }
        j=f[n-1];
        while (j>=0)
        {
            if (b[j]==b[n-1]) a[++cnt]=j+1;
            j=f[j];
        }
        for (int i=cnt;i>=1;i--)
            printf("%d ",a[i]);
        printf("%d
    ",n);
    }
    
    
  • 相关阅读:
    学习笔记
    .net $&替换正则查找到的内容
    sql 常用日期函数
    2010学习计划
    优化存储过程
    sql server 标量值函数
    job88数据库操作
    .net 调用有返回值的存储过程
    GridView 18种操作
    SQLite的局限性
  • 原文地址:https://www.cnblogs.com/nibabadeboke/p/11346000.html
Copyright © 2011-2022 走看看