classSolution{public:stringlongestPalindrome(strings){constintlength=s.length()*2+3;// Manacher's AlgorithmstringT(length,'#');T[0]='$';T[length-1]='@';for(inti=2;i<length-2;i+=2)T[i]=s[i/2-1];intcenter=1;intright=1;vector<int>P(length,0);for(inti=1;i<length-1;++i){intmirr=2*center-i;if(i<right)P[i]=min(P[mirr],right-i);while(T[i+P[i]+1]==T[i-P[i]-1])++P[i];if(i+P[i]>right){center=i;right=i+P[i];}}// find max and the center;intmax=0;intc=0;for(inti=0;i<length;++i)if(P[i]>max){max=P[i];c=i;}// omit '#' and get the string desiredstringans(max,'#');inti=0;for(intj=c-max+1;j<c+max;j+=2){ans[i]=T[j];++i;}returnans;}};