首页 > 其他 > 详细

Leetcode刷题

时间:2020-05-23 13:51:33      阅读:43      评论:0      收藏:0      [点我收藏+]

1. 最长回文子串

动态规划解法:

class Solution {
public:
    string longestPalindrome(string s) {
        int length = s.size();
        vector<vector<int>> dp(length, vector<int>(length));
        string ans;
        int max=1;
        // dp[i][j] = (dp[i]==dp[j]) && (dp[i+1][j-1] || j-i<3)
        for(int j=0; j<length; j++){
            for(int i=0; i<j+1; i++){
                if(s[i] != s[j]) dp[i][j]=false;
                else if(j-i<3) dp[i][j]=true;
                else if(dp[i+1][j-1]) dp[i][j]=true;
                int l = j-i+1;
                if(dp[i][j] && l>ans.size()) ans = s.substr(i,l);
            }
        }
        return ans;

    }
};

中心扩散法:

class Solution {
public:
    pair<int, int> expandAroundCenter(const string& s, int left, int right){
        while(left>=0 && right<s.size() && s[left]==s[right]){
            --left;
            ++right;
        }
        return {left+1, right-1};
    }

    string longestPalindrome(string s) {
        int start=0, end=0;
        for(int i=0; i<s.size();++i){
            auto [left1, right1] = expandAroundCenter(s, i, i);
            auto [left2, right2] = expandAroundCenter(s, i, i+1);
            if(right1-left1>end-start){
                start=left1;
                end = right1;
            }
            if(right2-left2>end-start){
                start = left2;
                end = right2;
            }
        }
        return s.substr(start, end-start+1);


    }
};

Leetcode刷题

原文:https://www.cnblogs.com/JetBlock/p/12941932.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!