题目详情
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
——题目难度:中等
思路
用一个二维数组dp来记录字符串中从下标l到下标r的字串是否为回文子串,如果是则为dp[l][r]为true,否则为false。
因为一个字符肯定是回文字串(dp[i][i]肯定为true),所以首先需要对dp数组进行初始化。
-下面代码
class Solution {
public:
string longestPalindrome(string s) {
int len = s.size();
if(len==0) return s;
int start=0, end=0;
bool dp[len][len];
for(int i=0;i<len;i++)
{
dp[i][i]=true;
}
for(int r=1;r<len;r++)
{
for(int l=0;l<r;l++)
{
if(s[l]==s[r] && (r-l==1 || dp[l+1][r-1])) {
dp[l][r] = true;
if(r-l > end-start) {
start = l;
end = r;
}
} else {
dp[l][r]=false;
}
}
}
return s.substr(start, end-start+1);
}
};
结果