class Solution {
public:
string longestPalindrome(string s) {
return manachar(s);
}
string manachar(string &s)
{
char b[2002];
int p[2002];
int len = s.size();
int k = 0;
b[k++] = '$';
b[k++] = '#';
for(int i = 0; i < len; i++)
{
b[k++] = s[i];
b[k++] = '#';
}
b[k] = '\0';
int L = strlen(b);
int id=0;
int right = 0, max = 0, c = 0;
for(int i = 0; i <len; i++)
{
p[i] = right> i ? min(p[c*2 - i], right-i) : 1;
while(i + p[i] < L && i - p[i] > -1)
{
if(i + p[i] == i - p[i])
p[i]++;
else
break;
}
if(i + p[i] > right)
{
right = i + p[i];
c = i;
}
if(p[i] > max)
{
max = p[i];
id = i;
}
}
string s1;
for(int i = id - max + 1; i < id + max; i++)
{
if(b[i] !='#')
s1.push_back(b[i]);
}
return s1;
}
};
leetcode 最长回文子串
最新推荐文章于 2025-04-07 22:20:05 发布