Longest Palindromic Subsequence
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:
2One possible longest palindromic subsequence is "bb".
解析:
设dp[i][j]为i到j字符串最长的回文长度,if s[i]==s[j]则 dp[i][j]=dp[i+1][j-1]+2,
否则dp[i][j]=max(dp[i+1][j],dp[i][j-1]),从i到j距离最短的开始算起。
代码:
class Solution {
public:
int longestPalindromeSubseq(string s) {
int length=s.size();
vector<vector<int>> dp(length,vector<int>(length,0));
for (int i=0; i<s.size(); i++)
{
dp[i][i]=1;
}
for (int i=1; i<s.size(); i++)
{
for (int j=0; j<s.size()-i; j++)
{
if (s[j]==s[j+i])
{
dp[j][j+i]=dp[j+1][j+i-1]+2;
}
else
{
dp[j][j+i]=max(dp[j][j+i-1],dp[j+1][j+i]);
}
}
}
return dp[0][length-1];
}
};