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

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

https://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506

import sys
s, t = input(), input()
if len(s)<len(t):
    s, t = t, s
s_n, t_n = len(s), len(t)

dp = [[0] * (t_n+1) for _ in range(s_n+1)]
# print(s, t)
max_v, max_i, max_j = 0, -1, -1
for i in range(1, s_n+1):
    for j in range(1, t_n+1):
        dp[i][j] = dp[i-1][j-1] + 1 if s[i-1]==t[j-1] else 0
        if dp[i][j] > max_v:
            max_v, max_i, max_j = dp[i][j], i-1, j-1
        elif dp[i][j] == max_v and (j-1) < max_j:
            max_i, max_j = i-1, j-1# s作为行,保证最短的第一次搜索到
# print(max_v, max_i, max_j)
print(s[(max_i - max_v+1):(max_i+1)])

遇到最长最短,首选动态规划。其中输出结果要求最短串中最先出现,因此在判断时需要额外条件更新子串的索引。

全部评论

相关推荐

牛客小菜鸡66:boss里面,招人的叫老板,找工作的叫牛人
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
08-14 22:16
我爱加瓦233:今年行情真的好起来了,暑期实习拿了美团,京东,饿了么三家的Offer,最终去了美团,披上了我的黄马褂,开启送外卖之旅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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