动态规划分析:
一、dp数组的定义:dp[i][j]表示从字符串下标的i - j的子串的最长回文子序列的长度。
二、base case : 单独字符的最长回文子序列的长度都是1。在dp数组中 i>j 是不合理的。
三、状态转移方程:如果字符串s 的 s[i] == s[j] ,那么最长的回文子序列的长度就dp[i][j]就是 dp[i+1][j-1] +2。如果不是相等的,那么 dp[i][j] 就是 dp[i+1][j] 和 dp[i][j-1] 中大的那个。
四、我们要的结果就是 dp[0][s.size()-1]。
下列是代码: