描述
给一字符串 s, 找出在 s 中的最长回文子序列的长度. 你可以假设 s 的最大长度为 1000.
样例
样例1
输入: "bbbab"
输出: 4
解释:
一个可能的最长回文序列为 "bbbb"
样例2
输入: "bbbbb"
输出: 5
思路:
表示到序列中最长回文序列的长度,那么显然由和还有当时候的的最大值决定。具体实现如下。
class Solution {
public:
/**
* @param s: the maximum length of s is 1000
* @return: the longest palindromic subsequence's length
*/
int longestPalindromeSubseq(string &s) {
// write your code here
int n=s.size();
if(!n)
{
return 0;
}
vector<vector<int>> dp(n,vector<int>(n,1));
for(int i=0;i<n-1;i++)
{
dp[i][i+1]=s[i]==s[i+1]?2:1;
}
for(int len=3;len<=n;len++)
{
for(int i=0;i<=n-len;i++)
{
int j=i+len-1;
dp[i][j]=max(dp[i][j-1],dp[i+1][j]);
if(s[i]==s[j])
{
dp[i][j]=max(dp[i+1][j-1]+2,dp[i][j]);
}
}
}
return dp[0][n-1];
}
};