📅  最后修改于: 2023-12-03 15:23:02.836000             🧑  作者: Mango
该问题来自于2009年印度国际空间研究组织(ISRO)的计算机科学入门考试。
给定一个字符串S,找到S中最长的回文子序列的长度。
字符串S,长度为n(1<=n<=1000)。
输出字符串S中最长回文子序列的长度。
BBABCBCAB
7
我们可以使用动态规划算法来解决该问题。定义dp[i][j]为字符串S[i...j]中最长回文子序列的长度。那么当i==j时,dp[i][j] = 1,当i<j时,如果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_palindromic_subsequence(S):
n = len(S)
dp = [[0] * n for _ in range(n)]
for i in range(n):
dp[i][i] = 1
for l in range(2, n+1):
for i in range(n-l+1):
j = i + l - 1
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代码实现。