题解里貌似没有string做法,都是字符数组,难道用string 会一直TLE?我自己测试了一下,貌似是输入就已经超时了
#include<bits/stdc++.h>
using namespace std;
inline string StringRead()
{
string str;
char s=getchar();
while(s==' '||s=='\n'||s=='\r')
s=getchar();
while(s!=' '&&s!='\n'&&s!='\r')
{
str+=s;
s=getchar();
}
return str;
}
int p[500050];
string s;
int main()
{
std::ios::sync_with_stdio();
s=StringRead();
string t="$";
for(register int i=0;i<s.length();++i)
t=t+"#"+s[i];
t+="#@";
int n=t.length();
int id=0,mx=0;
int ans=-1;
for(register int j=1;j<n-1;++j)
{
p[j]=mx>j?min(p[2*id-j],mx-j):1;
while(t[j+p[j]]==t[j-p[j]])
p[j]++;
if(mx<p[j]+j)
{
mx=p[j]+j;
id=j;
}
ans=max(ans,p[j]-1);
}
cout<<ans;
return 0;
}