题解 | #公共子串计算#

公共子串计算

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))

全部评论

相关推荐

吴offer选手:幽默小厂
点赞 评论 收藏
分享
待现的未见之事:起码第一句要把自己的优势说出来吧。比如什么xx本27届学生,随时到岗....
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客企业服务