1. 程式人生 > >LeetCode-05最長迴文子串

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的程式碼。

留下了沒技術的淚水。