5. 最长回文子串

题目

5. 最长回文子串 官方题解

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
public:
    string longestPalindrome(string s) {
        int n = s.size();
        vector<vector<bool>> f(n, vector<bool>(n, false));
        string res = s.substr(0, 1);

        for (int i = 0; i < n; i++) {
            f[i][i] = true;
            if (i < n - 1 && s[i] == s[i + 1]) {
                f[i][i + 1] = true;
                res = s.substr(i, 2);
            }
        }

        for (int d = 2; d < n; d++) {          // d = j - i
            for (int i = 0; i + d < n; i++) {
                int j = i + d;
                if (s[i] == s[j] && f[i + 1][j - 1]) {
                    f[i][j] = true;
                    res = s.substr(i, d + 1);  // d increases, so this is always the longest so far
                }
            }
        }
        return res;
    }
};