POJ-2752
Description
Step1. Connect the father's name and the mother's name, to a new string S.
Step2. Find a proper prefix-suffix string of S (which is not only the prefix, but also the suffix of S).
Example: Father='ala', Mother='la', we have S = 'ala'+'la' = 'alala'. Potential prefix-suffix strings of S are {'a', 'ala', 'alala'}. Given the string S, could you help the little cat to write a program to calculate the length of possible prefix-suffix strings of S? (He might thank you by giving your baby a name:)
Input
Restrictions: Only lowercase letters may appear in the input. 1 <= Length of S <= 400000.
Output
Sample Input
ababcababababcabab aaaaa
Sample Output
2 4 9 18 1 2 3 4 5
Source
题解:简单的KMP只要得到Next[len]即可,然后依次输出
AC代码为:
#include<iostream>
#include<cstring>
using namespace std;
const int Max = 400005;
char str[Max];
int len, Next[Max], ans[Max];
void Get_next()
{
int l=strlen(str);
Next[0]=Next[1]=0;
for(int i=1;i<l;i++)
{
int j=Next[i];
while(j && str[i]!=str[j])
j=Next[j];
Next[i+1]=str[i]==str[j]? j+1:0;
}
}
int main()
{
while(scanf("%s", str) != EOF)
{
len = strlen(str);
Get_next();
int i=len,cnt=0;
while(Next[i]>0)
{
ans[cnt++]=Next[i];
i = Next[i];
}
for(int i=cnt-1;i>=0;i--)
{
cout<<ans[i]<<" ";
}
cout<<len<<endl;
}
return 0;
}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步