rt, string 和 char 都试了,空间也开了两倍,依旧全部RE
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define maxn 22000005
string ss;
char s[maxn>>1];
int aa,hw[maxn],ans=-1,cnt;
void gett()
{
char c=getchar();
s[0]='-',s[cnt=1]='#';
while(c<'a'||c>'z')
c=getchar();
while(c>='a'&&c<='z')
s[++cnt]=c,s[++cnt]='#',c=getchar();
}
void getlongest()
{
int mr=0,mid=1;
for(int i=1;i<cnt;i++){
if(i<mr)
hw[i]=min(hw[mid*2-i],mr-i);
else hw[i]=1;
while(s[i+hw[i]]==s[i-hw[i]])
hw[i]++;
if(hw[i]+i>mr){
mr=hw[i]+i;
mid=i;
}
ans=max(ans,hw[i]);
}
ans-=1;
}
signed main()
{
gett();
getlongest();
cout<<ans<<endl;
return 0;
}