示例代码 登录后复制 class Solution { public: int longestPalindromeSubseq(string s) { int len=s.length(); //字符串s在[i, j]范围内最长的回文子序列的长度为dp[i][j]。 vector<vector<int>> dp(len+1,vector<int>(len+1)); //手动初始化一下,当i与j相同,那么dp[i][j]一定是等于1的,即:一个字符的回文子序列长度就是1。 for(int i=1;i<=len;i++){ dp[i][i]=1; } //如果这矩阵是从上到下,从左到右遍历,那么会用到没有计算过的dp[i + 1][j - 1] // 所以一定要从下到上,从左到右遍历,这样保证dp[i + 1][j - 1]都是经过计算的。 for(int i=len;i>0;i--){ //由于dp数组的定义得到的 for(int j=i+1;j<=len;j++){ if(s[i-1]==s[j-1]){ dp[i][j]=dp[i+1][j-1]+2; }else{ dp[i][j]=max(dp[i+1][j],dp[i][j-1]); } } } return dp[1][len]; } }; 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25. 效果展示 相似题目 LeetCode—647. 回文子串(双指针/动态规划)+5. 最长回文子串(动态规划) 原创作者: u_15305087 转载于: https://blog.51cto.com/u_15305087/11829941