题意:判断输入的字符串是不是符合下面的条件:在串中能找出一个子串,这个子串要求在前缀,后缀 及串中间都出现过,找到将其输出,没有则输出Just a Legent
#include<iostream>
#include<string>
using namespace std;
const int N = 1000001;
int Next[N],vis[N];
void getnext(string a)
{
int k=-1,j=0;
Next[0] = -1;
while(j<a.size())
{
if(k==-1||a[j]==a[k])
{
j++;
k++;
Next[j] = k;
}
else
k=Next[k];
}
}
int main()
{
string s;
cin>>s;
getnext(s);
for(int i=1;i<s.size();i++)
vis[Next[i]]=1;
int i = Next[s.size()];
while(i)
{
if(vis[i])
{
for(int j=0;j<i;j++)cout<<s[j];
cout<<endl;
break;
}
else
i = Next[i];
}
if(i==0)cout<<"Just a legend"<<endl;
}
本文介绍了一种用于判断字符串是否满足特定条件的算法:即在该字符串中能否找到一个子串,该子串同时作为字符串的前缀、后缀以及出现在字符串中间部分。文章通过具体的C++实现代码详细解释了这一过程。
602

被折叠的 条评论
为什么被折叠?



