给定一个字符串s,找到其中最长的回文子序列。可以假设s的最大长度为1000。
示例 1:
输入:"bbbab"
输出:4
一个可能的最长回文子序列为 "bbbb"。
示例 2:
输入:"cbbd"
输出:2
一个可能的最长回文子序列为 "bb"。
动态规划
状态:指针i, j从字符串的左右两端开始
dp 数组的定义:在⼦串 s[i…j] 中,最⻓回⽂⼦序列的⻓度为 dp[i][j]
选择: 取决于s[i]和s[j]
if (s[i] == s[j])
// 它俩⼀定在最⻓回⽂⼦序列中
dp[i][j] = dp[i + 1][j - 1] + 2;
else
// s[i+1..j] 和 s[i..j-1] 谁的回⽂⼦序列更⻓?
dp[i]<