• LeetCode "Longest Palindromic Substring"


    2D DP is an intuitive solution of course, but I got an MLE error, so I simplified it into a 1D DP:

    class Solution {
    public:
        void goDp(vector<int> &dp, int &maxLen, int &is, int &ie, int startLen, int len, string &s)
        {
            for(int ilen = startLen; ilen < len; ilen += 2)
            for(int i = 0; i < len - ilen; i ++)
            {
                bool bEq = s[i] == s[i + ilen];
                dp[i] = bEq ? (dp[i + 1] > 0 ? dp[i + 1] + 2 : 0) :    0;
                if( dp[i] > maxLen)
                {
                    maxLen = dp[i];
                    is = i; ie = i + ilen;
                }
            }
        }
        string longestPalindrome(string s) {
            int len = s.length();
            if(len == 0) return "";
    
            int maxLen = -1; int is = 0, ie = 0;
            //     Init
            vector<int> dp; dp.resize(len);
            
            //    Starting from 2
            for(int i = 0; i < len - 1; i ++)
            {
                if(s[i] == s[i + 1]) dp[i] = 2;
                else dp[i] = 0;
                if( dp[i] > maxLen)
                {
                    maxLen = dp[i];
                    is = i; ie = i + 1;
                }
            }        
            goDp(dp, maxLen, is, ie, 3, len, s);
    
            //    Starting from 1
            std::fill(dp.begin(), dp.end(), 1);
            goDp(dp, maxLen, is, ie, 2, len, s);
    
            return s.substr(is, ie - is + 1);
        }
    };

    Since loop on current length n depends linearly on dp data with length n-1, we can use 1D DP. And there are two cases of oddeven lengthes.

  • 相关阅读:
    Nginx支持HTTPS 使用OpenSSL制作自签的证书
    前端周刊第十五期
    前端周刊第十四期
    validate的使用
    python 建立windows计划任务
    requestium
    在Django中启动后台任务的简单方法
    django 控制进程
    selenium 等待
    win task scheduler
  • 原文地址:https://www.cnblogs.com/tonix/p/3893606.html
Copyright © 2020-2023  润新知