請問為什么編譯不了呀
#include <iostream>
#include<string>
#include<algorithm>
using namespace std;
//typedef long long ll;
//const int maxn=1e6+5;
int next[1000006];
void nextval(string t,int *next){
int i,j;//int o,j;
i=0,j=-1;//i=0,j=-1;
next[0]=-1;
while(i<t.length()){
if(j==-1||t[i]==t[j]){
++i;
++j;
//if(t[i]!=t[j])
next[i]=j;
//else next[i]=next[j];
}
else j=next[j];
}
}
int kmp(string s,string t){
int i=0;
int j=0;
nextval(t,next);
i=0,j=0;
int len1=s.length(),len2=t.length();
while(i<len1&&j<len2){
if(j==-1||s[i]==t[j]){
++i;
++j;
}
else j=next[j];
}
if(j>=t.length())
return i-j;
else return 0;
}
int main()
{
//ababaaaba
//fixprefixsuffix
//abcdabc
string t,s="";
cin>>t;
t+="A";
nextval(t,next);
int m=next[t.length()-1];
//cout<<m<<endl;
string f="";
for(int i=0;i<m;i++)
f=f+t[i];
for(int i=m;i<=t.length()-5;i++)
s=s+t[i];
int ff=kmp(s,f);
if(ff)cout<<f<<endl;
else cout<<"Just a legend"<<endl;
return 0;
}
#include<string>
#include<algorithm>
using namespace std;
//typedef long long ll;
//const int maxn=1e6+5;
int next[1000006];
void nextval(string t,int *next){
int i,j;//int o,j;
i=0,j=-1;//i=0,j=-1;
next[0]=-1;
while(i<t.length()){
if(j==-1||t[i]==t[j]){
++i;
++j;
//if(t[i]!=t[j])
next[i]=j;
//else next[i]=next[j];
}
else j=next[j];
}
}
int kmp(string s,string t){
int i=0;
int j=0;
nextval(t,next);
i=0,j=0;
int len1=s.length(),len2=t.length();
while(i<len1&&j<len2){
if(j==-1||s[i]==t[j]){
++i;
++j;
}
else j=next[j];
}
if(j>=t.length())
return i-j;
else return 0;
}
int main()
{
//ababaaaba
//fixprefixsuffix
//abcdabc
string t,s="";
cin>>t;
t+="A";
nextval(t,next);
int m=next[t.length()-1];
//cout<<m<<endl;
string f="";
for(int i=0;i<m;i++)
f=f+t[i];
for(int i=m;i<=t.length()-5;i++)
s=s+t[i];
int ff=kmp(s,f);
if(ff)cout<<f<<endl;
else cout<<"Just a legend"<<endl;
return 0;
}