给定一个字符串s
,找到其中最长的回文子序列。可以假设s
的最大长度为1000
。
示例 1:
输入:"bbbab"
输出:4
一个可能的最长回文子序列为 "bbbb"。
示例 2:
输入:"cbbd"
输出:2
一个可能的最长回文子序列为 "bb"。
class Solution {
public:
int longestPalindromeSubseq(string s) {
int n = s.size();
int 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[i] == s[j]){
dp[i][j] = i + 1 <= j - 1 ? 2 + dp[i + 1][j - 1] : 2;
}else{
dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);
}
}
}
return dp[0][n - 1];
}
};