字符串——Seek the Name, Seek the Famekmp应用

传送门:2752 -- Seek the Name, Seek the Fame

题意:给一个字符串s,要求所有最后一个字符结尾的相同前缀和后缀的长度,自身也算

Sample Input

ababcababababcabab
aaaaa

Sample Output

2 4 9 18
1 2 3 4 5

样例1解释:

a b a b c a b a b a b a b c a b a b
对于9:

a b a b c a b a b a b a b c a b a b

对于4

a b a b c a b a b a b a b c a b a b

对于2

a b a b c a b a b a b a b c a b a b

思路:一般的kmp处理完每个位置都只会有一个next值,所以这里并不能。但kmp具有一个很强的性质。

证明是应该不对

字符串——周期(kmp)_北岭山脚鼠鼠的博客-CSDN博客 这个有很大关系。

代码

#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
typedef unsigned long long ull;
const int N=1e6+10;
char a[N];
int ne[N];
int n,m;
void get()
{
     ne[1]=0;
    int j=0;
    for(int i=2;i<=n;i++)
    {
        while(j>0&&a[i]!=a[j+1]) j=ne[j];
        if(a[i]==a[j+1]) j++;
        ne[i]=j;
    }
}
int main()
{
    while(cin>>a+1)
    {
     n=strlen(a+1);
    get();
    vector<int>v;
    int j=n;

    while(ne[j]!=0)
    {
        v.push_back(ne[j]);
        j=ne[j];
    }
    for(int i=v.size()-1;i>=0;i--)
        cout<<v[i]<<' ';
    cout<<n<<endl;
    }
    return 0;
}

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...