题意:判断输入的字符串是不是符合下面的条件:在串中能找出一个子串,这个子串要求在前缀,后缀 及串中间都出现过,找到将其输出,没有则输出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;
}