alg-最长回文字符串

class Solution {
public:
    std::string longestPalindrome(const std::string& s) {
        if (s.empty()) {
            return "";
        }

        std::vector<std::vector<bool>> dp(s.size(),std::vector<bool>(s.size(),false));
        int left=0;
        int right=0;
        int max_len=0;

        for(int i=0;i<s.size();i++) {
            dp[i][i]=true;
        }

        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]&&max_len<i-j+1) {
                    max_len=i-j+1;
                    left=j;
                    right=i;
                }
            }
        }
        return s.substr(left, right - left + 1);
    }  
};

猜你喜欢

转载自www.cnblogs.com/smallredness/p/11208056.html