24-Longest Palindromic Substring-Leetcode
阅读原文时间:2023年07月11日阅读:1

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

这里给出一种AC的动态规划解法:时间和空间复杂度O(n2)

f(i,j)表示范围在(i,j)的串是否在回文串,同时记录最大回文串长度和起始位置

f(i,j)=(s[i]==s[j]and(i−j<2orf[i+1][j−1]))i−j>=2

f[i][i]=true;

class Solution {
public:
    string longestPalindrome(string s) {
        const int n=s.size();
        bool f[n][n];
        fill_n(&f[0][0],n*n,false);
        size_t max_len = 1,start =0;
        for(size_t i =0;i<s.size();++i){
            f[i][i]=true;
            for(size_t j=0;j<i;++j){
                f[j][i]=(s[j]==s[i]&&(i-j<2||f[j+1][i-1]));
                if(f[j][i]&&max_len<(i-j+1))
                {
                    max_len = i-j+1;
                    start = j;
                }
            }
        }
        return s.substr(start,max_len);
    }
};