摘自csdn博客:
1. 子问题的解如何表达?
给定一个字符串,子问题是:任意一个该字符串的子串包含的回文串的长度,那么对于这个字符串的子串,我们可以用它在原字符串中的起始位置和结束位置来表示。因此,我们可以用一个二维数组来对子问题进行表示,dp[i][j]表示he longest palindromic subsequence's length of substring(i, j)。
2. 大问题如何用子问题来表示?
dp[i][j] = dp[i+1][j-1] + 2
if s.charAt(i) == s.charAt(j)
otherwise, dp[i][j] = Math.max(dp[i+1][j], dp[i][j-1])
Initialization
: dp[i][i] = 1
class Solution {
public:
int longestPalindromeSubseq(string s) {
if(s.size()==0)
return 0;
int table[s.size()][s.size()]={0};
for(int i=0;i<s.size();i++)
table[i][i]=1;
for(int i=s.size()-1;i>=0;i--)
{
for(int j=i+1;j<s.size();j++)
{
if(s[i]==s[j])
table[i][j]=2 + table[i+1][j-1];
else
table[i][j]=max(table[i+1][j],table[i][j-1]);
}
}
return table[0][s.size()-1];
}
};