题解 | #最长回文子序列# Python3

最长回文子序列

https://www.nowcoder.com/practice/82297b13eebe4a0981dbfa53dfb181fa

import sys

# dp[i][j] 为 从 i 到 j 的最长子序列

# dp[i][j] = max(dp[i+1][j-1] + 2*(s[i]==s[j]),dp[i][j-1], dp[i+1][j])

# 需要知道 dp[i+1][j-1]和dp[i][j-1]的值,说明填表方向是,第一维从n到i,第二维从0到j
# 这种填表方向可行

s = input().strip()

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):
        dp[i][j] = max(dp[i+1][j-1]+ 2*int((s[i]==s[j])), dp[i][j-1], dp[i+1][j])

print(dp[0][-1])

全部评论

相关推荐

一tiao酸菜鱼:秋招还没正式开始呢,就准备有结果了。。。。?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务