题解 | #查找两个字符串a,b中的最长公共子串#

查找两个字符串a,b中的最长公共子串

https://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506?tpId=37&tqId=21288&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fdifficulty%3D3%26page%3D1%26pageSize%3D50%26search%3D%26tpId%3D37%26type%3D37&difficulty=3&judgeStatus=undefined&tags=&title=

  • 状态转移方程
  • a[i] == b[i], dp[i][j] = dp[i-1][j-1],dp表示以a[i]结尾的字串和以b[j]结尾的字串的最长公共子串
a = input()
b = input()

# 确保a就是较短串
if len(a) > len(b):
    a, b = b, a

# 初始化
n, m = len(a) + 1, len(b) + 1
dp = [[0] * m for _ in range(n)]

max_n = 0
idx = -1
for i in range(1, n, 1):
    for j in range(1, m, 1):
        if a[i-1] == b[j-1]:
            dp[i][j] = dp[i - 1][j - 1] + 1
        if dp[i][j] > max_n:
            max_n = dp[i][j]
            # dp[i][j]表示的是下标为i-1,j-1的两个字串
            idx = i-1

print(a[idx - max_n + 1 : idx + 1] if idx != -1 else "")

全部评论

相关推荐

爱读书的放鸽子能手很...:刷个两端实习,冲春招,流水线什么时候不能去
我的秋招日记
点赞 评论 收藏
分享
我的offer呢😡:这不才9月吗,26到明年毕业前能一直找啊,能拿下提前批,转正的,offer打牌的都是有两把刷子的,为什么非要跟他们比。如果别人是9本硕+金牌+好几段大厂实习呢?如果别人是双非通天代呢?如果别人是速通哥呢?,做好自己就行了,我们做不到他们一样提前杀死比赛,但晚点到终点也没啥关系吧
双非应该如何逆袭?
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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