📌  相关文章
📜  国际空间研究组织 | ISRO CS 2009 |问题 66(1)

📅  最后修改于: 2023-12-03 15:23:02.836000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2009 |问题 66

该问题来自于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代码实现。