题目链接
文章目录
- 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);}
};