🔴 一字之差:子串 vs 子序列

👁️ 0 人浏览 💬 0 人评论 ❤️ 添加收藏

一个字符串 abcbdcba(8 个字符)。回文就是正着读和倒着读一样。同一个字符串,左边输出最长回文子串的长度,右边输出最长回文子序列的长度:

S = "abcbdcba"

def longest_pal_substr(s):
    best = ""
    for i in range(len(s)):
        for j in range(i + 1, len(s) + 1):
            w = s[i:j]
            if w == w[::-1] and len(w) > len(best):
                best = w
    return best

def lps(s):
    n = len(s)
    dp = [[0] * n for _ in range(n)]
    for i in range(n - 1, -1, -1):
        dp[i][i] = 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]

print(str(len(longest_pal_substr(S))) + "/" + str(lps(S)))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论