1. 程式人生 > 其它 >5. 最長迴文子串 dp

5. 最長迴文子串 dp

給你一個字串 s,找到 s 中最長的迴文子串。

class Solution {
public:
    string longestPalindrome(string s) {
        int n = s.size();
        if (n < 2) {
            return s;
        }

        int maxlen = 1;
        string ans = "";
        ans += s[0];

        int l, r;

        vector <vector<bool>> dp(n, vector<bool> (n, false));
        for (int i = 0; i < n; i++) {
            dp[i][i] = true;
        }

        // 列舉字串長度
        for (int len = 2; len <= n; len++) {
            // 列舉左邊界
            for (l = 0; l < n; l++) {
                // 確定右邊界
                r = l + len - 1;
                if (r >= n) {
                    break;
                }

                if (s[l] == s[r]) {
                    if (len == 2) {
                        dp[l][r] = true;
                    }
                    else {
                        dp[l][r] = dp[l + 1][r - 1];
                    }
                }
                else {
                    dp[l][r] = false;
                }

                if (dp[l][r] && r - l + 1 > maxlen) {
                    maxlen = r - l + 1;
                    ans = s.substr(l, maxlen);
                }
            }
        }

        return ans;
    }
};