HHR的小站
享受代码带来的快乐吧
首页
LeetCode 5. 最长回文子串
2020-02-06 |HHR | 代码使人快乐, LeetCode, DP

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

示例 2:

输入: "cbbd"
输出: "bb"

class Solution {
public:
    string longestPalindrome(string s) {
        if (s.length() == 0) return "";
        bool dp[1000][1000] = {{false}};
        int max = 0;
        string ans;
        for (int x = s.length(); x >= 0; x--) {
            for (int y = x; y < s.length(); y++) {
                if (y - x < 2) {
                    dp[x][y] = s[x] == s[y];
                } else {
                    dp[x][y] = dp[x + 1][y - 1] && (s[x] == s[y]);
                }
                if (dp[x][y] && y - x + 1 > max) {
                    max = y - x + 1;
                    ans = s.substr(x, y - x + 1);
                }
            }
        }
        return ans;
    }
};

第i到第j个char能否构成回文取决于
1.第i+1到第j-1个char是否回文
2.第i个char和第j个char是否相同
dp[i][j]=dp[i+1][j-1]&&s[i]==s[j]
注意考虑串为空的特殊情况
x自大到小,y从小到大,确保dp[x+1][y-1]已经完成定义

https://leetcode-cn.com/problems/longest-palindromic-substring/

respond-post-152

添加新评论

请填写称呼
请填写合法的电子邮箱地址
请填写合法的网站地址
请填写内容