题目链接:
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;
}
};
本文介绍了一个基于Manacher算法的变形来解决LeetCode上最长回文子串问题的方法。通过预处理字符串并使用Manacher算法,该算法能够高效地找到给定字符串中最长的回文子串。
600

被折叠的 条评论
为什么被折叠?



