Question:
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
One possible longest palindromic subsequence is “bb”.
Solution:
就是习题讲过的最长回文子序列,用动态规划解决,状态转移方程为,用dp[i][j]表示子串s(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+1][j], dp[i][j-1])
其他情况为非子串的情况,dp都可以设为0,实际实现时做了判断i+1 > j-1
class Solution {
public:
int longestPalindromeSubseq(string s) {
int dp[s.size()][s.size()];
for (int i = s.size()-1; i >= 0; i--) {
dp[i][i] = 1;
for (int j = i+1; j < s.size(); j++) {
if (s[i] == s[j])
dp[i][j] = (i+1 > j-1 ? 0 : dp[i+1][j-1]) + 2;
else
dp[i][j] = max(dp[i+1][j], dp[i][j-1]);
}
}
return dp[0][s.size()-1];
}
};