题解 | #公共子串计算#

公共子串计算

https://www.nowcoder.com/practice/98dc82c094e043ccb7e0570e5342dd1b

# 非常典型的滑动窗口题目。
# 在长串 上有一个游走的虚拟 窗口,将窗口内的内容和 短的串比较,看看有多少个重复元素。
# 窗口的 左边索引是l ,右边索引是r。
# 但是我自己动手写了一遍,发现滑动窗口的写法并不好写。于是换动态规划来写。
# 换动态规划:
# 设定 d[i][j] 为 a[i-1] b[j-1] 结尾的字符串的公共子串长度;
# 则 d[i][j] 在 a[i-1] == b[j-1] 情况下,需要更新 为 d[i][j] = d[i-1][j-1] + 1
# 这种在 某种情况下更新的 递推公式,往往最大值不会出现在最后,需要max求结果。

a,b = input(),input()
d = [[ 0 for j in range(len(b)+1)] for i in range(len(a)+1)] # 初始化 
result = [0]
for i in range(1,len(a)+1):
    for j in range(1,len(b)+1):
        if a[i-1] == b[j-1]:
            d[i][j] = d[i-1][j-1] + 1
            result.append(d[i][j])
print(max(result))

全部评论

相关推荐

还在公海池里。。。 能不能给孩子一次面试机会。。。 不知道在海里游多久能上岸
我只是一个小白菜:人才库就人才库,还搞个公海
投递京东等公司10个岗位
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

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