时间复杂度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]; } };