1.题目
给定一个字符串s,找到其中最长的回文子序列。可以假设s的最大长度为1000。
示例 1:
输入:
“bbbab”
输出:
4
一个可能的最长回文子序列为 “bbbb”。
示例 2:
输入:
“cbbd”
输出:
2
一个可能的最长回文子序列为 “bb”。
2.解题过程
难度是中等,要用动态规划的方法去记录dp状态,dp[i][j]代表从i到j字符串中的最长回文子串长度,
当s[i]=s[j]时,dp[i][j] = dp[j+1][j-1]+2
当s[i]!=s[j]时,dp[i][j] = max(dp[j+1][j],dp[i][j-1])
i是倒序遍历,j是i+1到length-1的遍历

代码:
class Solution(object):
def longestPalindromeSubseq(self, s):
length = len(s)
dp = [[0 for _ in range(length)] for _ in range(length)]
for i in range(length-1, -1, -1):
dp[i][i] = 1
for j in range(i+1, length):
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][length-1]
s = Solution()
s.longestPalindromeSubseq('acdcb')
本文介绍了一种使用动态规划解决寻找字符串中最长回文子序列问题的方法。通过实例演示了算法的运行过程,展示了如何利用二维数组记录状态并求解最长回文子序列的长度。
311

被折叠的 条评论
为什么被折叠?



