问题描述:
给定字符串s,找到s中最长回文子序列的长度。你可以假设最长回文子序列的长度为1000。
解题思路:
声明一个二维数组p[i][j],表示从i到j间的最长回文子序列的长度。
Example 1:
Input:
"bbbab"Output:
4One possible longest palindromic subsequence is "bbbb".
从这个例子中,我们可以看出,这里的回文子序列不要求是连续的。
所以,我们不难得出递推公式:
if(s[i]==s[j]) p[i][j]=p[i+1][j-1]+2;
else p[i][j]=max(p[i+1][j],p[i][j-1]);
源代码如下:
class Solution {
public:
int longestPalindromeSubseq(string s) {
int size=s.size();
int p[size][size];
for(int i=size-1;i>=0;i--)
{
for(int j=0;j<size;j++)
{
if(i==j) p[i][j]=1;
else if(i>j) p[i][j]=0;
else
{
if(s[i]==s[j]) p[i][j]=p[i+1][j-1]+2;
else p[i][j]=max(p[i+1][j],p[i][j-1]);
}
}
}
return p[0][size-1];
}
};
public:
int longestPalindromeSubseq(string s) {
int size=s.size();
int p[size][size];
for(int i=size-1;i>=0;i--)
{
for(int j=0;j<size;j++)
{
if(i==j) p[i][j]=1;
else if(i>j) p[i][j]=0;
else
{
if(s[i]==s[j]) p[i][j]=p[i+1][j-1]+2;
else p[i][j]=max(p[i+1][j],p[i][j-1]);
}
}
}
return p[0][size-1];
}
};