516. Longest Palindromic Subsequence

来源:互联网 发布:幼儿园学英语软件 编辑:程序博客网 时间:2024/06/06 02:10
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:4One possible longest palindromic subsequence is "bbbb".Example 2:Input:"cbbd"Output:2
  • 这道题目还比较有意思,关键是找到递推公式。本题的回文与一般的题目的回文还不太一样。我们用dp[i][j]表示从i到j之间的回文字串最大长度:
  • s[i] == s[j],则这时dp[i][j] = dp[i+1][j-1] + 2;
  • s[i] != s[j],则这是dp[i][j] = max(dp[i][j-1],dp[i-1][j]);
class Solution {public:    int longestPalindromeSubseq(string s) {        int n = s.size();        vector<int> t(n,0);        vector<vector<int>> dp(n,t);        if(n <= 1){            return n;        }        for(int i = 0;i < n;++i){            dp[i][i] = 1;        }        for(int l = 1;l <= n-1; ++l){            for(int i = 0; i < n-l; ++i){                int j = i + l;                if(s[j] == s[i]){                   dp[i][j] = (j == i+1)?2:dp[i+1][j-1]+2;                               }else{                    dp[i][j] = max(dp[i][j-1],dp[i+1][j]);                }            }        }        return dp[0][n-1];    }};
原创粉丝点击