题目: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".
给定一个字符串,我们可以将它划分成这样的子问题:任意一个该字符串的子串包含的回文串的长度,那么对于这个字符串的子串,我们可以用它在原字符串中的起始位置和结束位置来表示。因此,我们可以用一个二维数组来对子问题进行表示。
解法:
class Solution {
public:
int longestPalindromeSubseq(string s) {
int n = s.length(), dp[n][n];
for(int i = 0; i < n; i++)
dp[i][i] = 1;
for(int j = 1; j < n; j++) {
for(int i = j - 1; i >= 0; i--) {
if(s[j] == s[i]) {
dp[i][j] = (i + 1 <= j - 1) ? dp[i + 1][j - 1] + 2 : 2;
}
else
dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);
}
}
return dp[0][n - 1];
}
};