5. 最长回文子串
Posted 这是一个很随便的名字
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5. 最长回文子串相关的知识,希望对你有一定的参考价值。
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
示例 3:
输入:s = "a"
输出:"a"
示例 4:
输入:s = "ac"
输出:"a"
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母(大写和/或小写)组成
class Solution {
public:
string longestPalindrome(string s) {
char ss[2000+5];
ss[0]='$';
int n = 1;
for(int i = 0;i<s.size();i++)
{
ss[n++] = '#';
ss[n++] = s[i];
}
ss[n++] = '#';
ss[n++] = '^';
ss[n] = 0;
int p[2000+5]={0};
int mx = 0;
int id = 1;
int mxlen = 0;
int pos = 0;//记录最长的位置
for(int i = 1;i<n;i++)
{
if(i<mx)
p[i]=min(p[2*id-i],mx-i);
else p[i]=1;
while(ss[p[i]+i]==ss[i-p[i]]) p[i]++;
if(mx<p[i]+i)
{
mx = p[i]+i;
id = i;
}
if(p[i]-1>mxlen)
{
pos = i-p[i];
mxlen = p[i]-1;
}
}
return s.substr(pos/2,mxlen);
}
};
以上是关于5. 最长回文子串的主要内容,如果未能解决你的问题,请参考以下文章