zoukankan      html  css  js  c++  java
  • 516. Longest Palindromic Subsequence

    Problem statement: 

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

    Example 1:
    Input:

    "bbbab"
    

    Output:

    4
    

    One possible longest palindromic subsequence is "bbbb".

    Example 2:
    Input:

    "cbbd"
    

    Output:

    2
    

    One possible longest palindromic subsequence is "bb".

    Solution:

    This is a dynamic programming problem. The key point also is to find the dynamic formula. Although there is only one string, but we need a two dimension array. The value in diagonal is 1 and we only need right up part above diagonal.

    dp[i][j] means the max subsequence from position i to j. The formula is:

    dp[i][j] = dp[i + 1][j - 1]   if s[i] == s[j]
    
         = max(dp[i + 1][j], dp[i][j + 1]) if s[i] != s[j]

    Since there is i + 1 and j - 1 is essential for current dp[i][j], we should do DP from bottom to up, left to right.

    The time complexity is O(n*n), n is the size of string.

    class Solution {
    public:
        int longestPalindromeSubseq(string s) {
            int size = s.size();
            vector<vector<int>> dp(size, vector<int>(size, 0));
            for(int i = 0; i < size; i++){
                dp[i][i] = 1;
            }
            for(int i = size - 2; i >= 0; i--){
                for(int j = i + 1; j < size; j++){
                    if(s[i] == s[j]){
                        dp[i][j] = dp[i + 1][j - 1] + 2;
                    } else {
                        dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);
                    }
                }
            }
            return dp[0][size - 1];
        }
    };
  • 相关阅读:
    viewpoint vw适配 兼容方案
    函数参数默认值
    vue v-bind 的prop属性
    vue 全局错误处理 errorHandler
    Python模块学习
    频谱共享---小记
    LTE的信道
    PLMN(公共陆地移动网络)
    单元测试框架GoogleTest
    OpenRAN是什么
  • 原文地址:https://www.cnblogs.com/wdw828/p/6828785.html
Copyright © 2011-2022 走看看