LeetCode-05最长回文子串

C++

class Solution {
public:
    string longestPalindrome(string s) {
        if (s.empty()) return "";
        int dp[s.size()][s.size()] = {0}, left = 0, right = 0, len = 0;
        for (int i = 0; i < s.size(); ++i) {
            for (int j = 0; j < i; ++j) {
                dp[j][i] = (s[i] == s[j] && (i - j < 2 || dp[j + 1][i - 1]));
                if (dp[j][i] && len < i - j + 1) {
                    len = i - j + 1;
                    left = j;
                    right = i;
                }
            }
            dp[i][i] = 1;
        }
        return s.substr(left, right - left + 1);
    }
};

这是动态规划的方法,还有中心扩散法和Manacher's Algorithm 马拉车算法,马拉车还有点迷糊,等我过段时间再看下,然后再补上C的代码。

留下了没技术的泪水。

猜你喜欢

转载自blog.csdn.net/tingfenghanlei/article/details/84141077