#include<bits/stdc++.h>
using namespace std;
int n;
string s;
int p[(int)8e5+5];
string ss;
int cnt[(int)8e5+5];
int main()
{
cin>>n;
cin>>s;
ss+='#';
for(int i=0;i<s.size();i++)
{
ss+=s[i];
ss+='#';
}
int r=0,c=0;
for(int i=0;i<ss.size();i++)
{
if(i<=r)p[i]=min(r-i,p[2*c-i]);
else p[i]=1;
while(ss[p[i]+i]==ss[i-p[i]])p[i]++;
if(i+p[i]>r)
{
r=i+p[i];
c=i;
}
ans=max(ans,p[i]);
cnt[i]=i+p[i]-1;
}
int x=0;
for(int i=0;i<ss.size();i++)
{
if(cnt[i]==ss.size()-1)
{
x=cnt[i]-i+1;
break;
}
}
cout<<s.size()-x+1;
return 0;
}
主要思路是找到以末尾为结尾的回文串长度,然后减一下,但直接WA on#1了,求助。
玄关