码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode刷题

时间:2020-05-23 13:26:46      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:amp   vector   bst   --   tco   int start   false   code   ++   

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刷题

标签:amp   vector   bst   --   tco   int start   false   code   ++   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!