• 516


    Given a string s, find the longest palindromic subsequence's length in s. You may assume that the maximum length of s is 1000.

    dp.

    这个最长的镜像子序列不一定是连续的。比如说bbab的最长镜像子序列就是bbb。创建一个dp二维数组,dp[i][j]表示字符串中第i位到第j位之间的最大镜像子序列的长度。

    basic step: dp[i][i]=1

    state transition:若s[i]=s[j],则dp[i][j]=dp[i+1][j-1]+2;若s[i]!=s[j],则dp[i][j]=max(dp[i+1][j],dp[i][j-1]).

    状态转移方程的后一个比较好理解,前一个需要细细考虑。当然第一个条件的强化版dp[i][j]=max(dp[i+1][j-1]+2,dp[i][j-1],dp[i+1][j-1])也是可以,不过其实只要简化版就足够了。

    class Solution {
    public:
        int longestPalindromeSubseq(string s) {
            int len=s.length();
            vector<vector<int>>dp(len,vector<int>(len));
            for(int i=len-1;i>=0;i--)
            {
                dp[i][i]=1;
                for(int j=i+1;j<len;j++)
                {
                    if(s[i]==s[j])
                    {
                        dp[i][j]=dp[i+1][j-1]+2;
                    }
                    else 
                    {
                        dp[i][j]=dp[i+1][j]>dp[i][j-1]?dp[i+1][j]:dp[i][j-1];
                    }
                }
            }
            return dp[0][len-1];
        }
    };
  • 相关阅读:
    JSOI2015 总结
    JSOI2014 总结
    JSOI2010/2011 总结
    1.13 考试总结
    1.15 考试总结
    [SDOI2015]寻宝游戏
    [教程]视频网课如何打开倍速纵享丝滑
    对机器学习的一些理解【学术篇】
    angular JS 路由功能
    理解 $scope
  • 原文地址:https://www.cnblogs.com/KRCheung/p/6822654.html
Copyright © 2020-2023  润新知