1.题目描述
给定一个字符串 s
,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s
的最大长度为 1000
。
示例 1:
输入:
"bbbab"
输出:
4
一个可能的最长回文子序列为 "bbbb"。
示例 2:
输入:
"cbbd"
输出:
2
一个可能的最长回文子序列为 "bb"。
2.解题思路
本题属于使用动态规划方法解决的一道题,回文序列的意思应该不用去解释了。做动态规划的题目,首先要去定义dp数组的含义。这里我们定义一个二维数组dp
dp[i][j]表示字符串s[i⋯j]的最长回文子序列的长度。
看下面的例子:
假设我们现在知道了dp[i+1][j-1]dp[i+1][j−1],我们如何计算dp[i][j]dp[i][j]呢?我们只需要观察是s[i] 等不等于s[j]
当]s[i]=s[j],那么就说明在原先的基础上又增加了回文子序列的长度,dp[i][j] = dp[i+1][j-1] + dp[i][j]=dp[i+1][j−1]+2。
当s[i]!=s[j]