📅  最后修改于: 2023-12-03 15:12:44.319000             🧑  作者: Mango
给定一个字符串S
,找到它的最长回文子序列的长度。您可以假设字符串的最大长度为1000。
输入格式:
输出格式:
本题可以使用动态规划的思路来解决,具体方法如下:
dp[i][j]
表示区间[i,j]
中的最长回文子序列的长度dp[i][i] = 1
S[i] == S[j]
,则dp[i][j] = dp[i+1][j-1]+2
,否则dp[i][j] = max(dp[i+1][j], dp[i][j-1])
。def longest_palindrome_subsequence(s: str) -> int:
n = len(s)
dp = [[0] * n for _ in range(n)]
for i in range(n):
dp[i][i] = 1
for i in range(n-1, -1, -1):
for j in range(i+1, n):
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]
注:Python代码中的"_":int
表示这个变量暂时不会用到,"_"是Python中表示占位的特殊字符。