1040. Longest Symmetric String

回文,用manacher算法

#include<algorithm>
#include<string>
#include<iostream>
using namespace std;
const char cc='\2';
int p[3000],mx,id;
int main(){
  string _s,s(1,cc); getline(cin,_s);
  for(auto x:_s) s+=x,s+=cc;
  for(int i=1;i<s.size();++i){
    if(mx>i)  p[i]=min(p[id*2-i],mx-i);
    while(i-p[i]>=0&& i+p[i]<s.size()&& s[i+p[i]]==s[i-p[i]]) ++p[i];
    if(p[i]>mx-id)mx=p[i]+i,id=i;
  }
  cout<<*max_element(p,p+s.size())-1;
}


你可能感兴趣的:(1040. Longest Symmetric String)