1.想想与回文 子串 有什么区别(子串与子序列) 2.初始条件 3.循环遍历从后开始。 class Solution { public: int longestPalindromeSubSeq(string s) { int n = s.size(); //dp[i][j],从下标 i 到下标 j 的子串中,回文子序列的最大长度 vector<vector<int>> dp(n, vector<int>(n)); for(int i = 0; i < n; i++) dp[i][i] = 1; //从后往前遍历,子问题以被计算 for(int i = n-1; 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]; } };