题目链接:
https://leetcode.com/problems/longest-palindromic-substring/description/
题解:
Manacher算法的简单变形
代码:
class Solution {
public:
string longestPalindrome(string s) {
string ss="&#";
for(int i=0;i<s.size();i++)
{
ss+=s[i];
ss+="#";
}
int p[3000+10];
memset(p,0,sizeof(p));
int mx=0,id=0;
for(int i=1;i<=ss.size();i++)
{
if(mx>i)
p[i]=(p[2*id-i]<(mx-i)? p[2*id-i]:(mx-i));
else
p[i]=1;
while(ss[i-p[i]]==ss[i+p[i]])
p[i]++;
if(i+p[i]>mx)
{
mx=i+p[i];
id=i;
}
}
int MAX=0,pos;
for(int i=1;i<ss.size();i++)
{
if(p[i]>MAX)
{
pos=i;
MAX=p[i];
}
}
MAX--;
int st=pos-MAX;
int ed=pos+MAX;
string ssr="";
for(int i=st;i<=ed;i++)
{
if(ss[i]!='#')
ssr+=ss[i];
}
return ssr;
}
};