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 这道题目还比较有意思,关键是找到递推公式。本题的回文与一般的题目的回文还不太一样。我们用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]; } };