class Solution { public: void manacher(string s,int n,vector<int>& p){ int m = 0; int r = m + p[0]; //回文串的最右点 for(int i = 1; i < n; i++){ //当新中心在之前的回文中时 if(r > i) p[i] = p[2*m-i]<(r - i)?p[2*m-i]:(r-i); //r-i表示最右点离新中心的距离,p[2*m-i] = p[i],以m为中心 //半径p增长,得到以i为中心的最长半径 for(;s[i + p[i]] ...