【LeetCode】5. 最长回文串

题目链接

文章目录

  • 1. 思路讲解
  • 2. 代码实现

1. 思路讲解

与求回文子串思路差别不大

在做这道题目之前,可以先做一下另一道回文子串的题目,如果会了那道求回文子串的题目,这道题基本上也就会了。

回文子串的题解在这里

它也就是求出每一个回文子串后,不是统计有多少个回文子串,而是挑出最长的那个回文子串并在循环结束之后返回即可。

代码也只不过改动了一点点而已。

2. 代码实现

【LeetCode】5. 最长回文串_第1张图片

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);
    }
};

你可能感兴趣的:(题,leetcode,算法,职场和发展)