美文网首页
667. 最长的回文序列

667. 最长的回文序列

作者: 薄荷糖的味道_fb40 | 来源:发表于2019-05-23 13:58 被阅读0次

    描述

    给一字符串 s, 找出在 s 中的最长回文子序列的长度. 你可以假设 s 的最大长度为 1000.

    样例

    样例1
    
    输入: "bbbab"
    输出: 4
    解释:
    一个可能的最长回文序列为 "bbbb"
    样例2
    
    输入: "bbbbb"
    输出: 5
    

    思路:

    dp[i][j]表示ij序列中最长回文序列的长度,那么显然dp[i][j]dp[i+1][j]dp[i][j-1]还有当s[i]=s[j]时候的dp[i+1][j-1]+2的最大值决定。具体实现如下。

    class Solution {
    public:
        /**
         * @param s: the maximum length of s is 1000
         * @return: the longest palindromic subsequence's length
         */
        int longestPalindromeSubseq(string &s) {
            // write your code here
            int n=s.size();
            if(!n)
            {
                return 0;
            }
            vector<vector<int>> dp(n,vector<int>(n,1));
            for(int i=0;i<n-1;i++)
            {
                dp[i][i+1]=s[i]==s[i+1]?2:1;
            }
            for(int len=3;len<=n;len++)
            {
                for(int i=0;i<=n-len;i++)
                {
                    int j=i+len-1;
                    dp[i][j]=max(dp[i][j-1],dp[i+1][j]);
                    if(s[i]==s[j])
                    {
                        dp[i][j]=max(dp[i+1][j-1]+2,dp[i][j]);
                    }
                    
                }
            }
            return dp[0][n-1];
        }
    };
    

    相关文章

      网友评论

          本文标题:667. 最长的回文序列

          本文链接:https://www.haomeiwen.com/subject/dovvzqtx.html