class Solution {
public:
string longestPalindrome(string s) {
int n=s.size(),len[n*2+4];char str[n*2+4];
str[0]='*';
for(int i=0;i<n;++i) str[i*2+1]='#',str[i*2+2]=s[i];
s[n*2+1]='#',s[n*2+2]='@',s[n*2+3]='\n';
int dex,mxlen=0,mx=0,po=0;
for(int i=1;i<=2*n;++i){
len[i]=(i<mx)?min(mx-i+1,len[2*po-i]):1;
while(str[i-len[i]]==str[i+len[i]]) ++len[i];
if(i+len[i]-1>mx) mx=i+len[i]-1,po=i;
if(len[i]-1>mxlen) dex=i,mxlen=len[i]-1;
}
string ans;
if(mxlen&1) ans=s.substr(dex/2-1-mxlen/2,mxlen);
else ans=s.substr(dex/2-mxlen/2,mxlen);
return ans;
}
};
leetcode 5. 最长回文子串(返回最大回文子串(不是返回长度) manacher模板无脑)
最新推荐文章于 2022-08-03 17:48:58 发布