题目链接
文章目录
- 1. 思路讲解
- 2. 代码实现
1. 思路讲解
与求回文子串思路差别不大
在做这道题目之前,可以先做一下另一道回文子串的题目,如果会了那道求回文子串的题目,这道题基本上也就会了。
回文子串的题解在这里
它也就是求出每一个回文子串后,不是统计有多少个回文子串,而是挑出最长的那个回文子串并在循环结束之后返回即可。
代码也只不过改动了一点点而已。
2. 代码实现
class Solution {
public:
string longestPalindrome(string s) {
int n = s.size();
vector<vector<bool>> dp(n, vector<bool>(n));
int start = 0; // 最长的回文子串的起始位置
int len = 0; // 最长的回文子串的长度
for (int i = n - 1; i >= 0; --i)
{
for (int j = i; j < n; ++j)
{
if (s[i] == s[j])
dp[i][j] = i + 1 < j ? dp[i+1][j-1] : true;
// 如果该位置为回文子串,那么判断长度是否大于之前最长的长度
// 如果大于,则对起始位置和最长长度进行更新
if (dp[i][j] == true && j - i + 1 > len)
{
len = j - i + 1;
start = i;
}
}
}
// 根据起始位置和长度返回最长回文子串
return s.substr(start, len);
}
};