题解 | #公共子串计算#
公共子串计算
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))