时间复杂度O(N²),空间复杂度O(N²)
[C++ 代码]
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string 一个字符串由小写字母构成,长度小于5000
* @return int
*/
int longestPalindromeSubSeq(string s) {
int n = s.length();
vector<vector<int>> dp(n, vector<int>(n));
// 1. 状态初始化,单字符序列
for(int i=0; i<n; ++i) dp[i][i] = 1;
// 2. 状态转移
for(int i=n-2; i>=0; --i){
for(int j=i+1; j<n; ++j){
if(s[i]==s[j]) dp[i][j] = dp[i+1][j-1] + 2;
else dp[i][j] = max(dp[i+1][j], dp[i][j-1]);
}
}
return dp[0][n-1];
}
};

京公网安备 11010502036488号