动态规划之——最长公共子串和矩阵链乘法
1. 最长公共子串 最长公共子串与最长公共子序列有一些类似,只不过这里子串要求是连续的。 这里我们定义 lcs[i][j] 表示 以 s[i] 与 t[j] 为末尾元素 的最长公共子串长度,那么我们有: \[lcs[i][j] = \begin{cases} lcs[i-1][j-1]+1 &\text{如果 } s[i] == t[j] \\ 0 &\text{如果 } s[i] != t[j] \end{cases}\] import numpy as np s = 'mitcmu' t = 'mtacmu' def longest_commom_substr(s, t): m = len(s) n = len(t) lcs = np.zeros((m, n), 'uint8') max_lcs = 0 for i in range(0, n): if s[0] == t[i]: lcs[0][i] = 1 else: lcs[0][i] = 0 for i in range(0, m): if s[i] == t[0]: lcs[i][0] = 1 else: lcs[i][0] = 0 for i in range(1, m): for j in range(1, n): if s[i] == t[j]: lcs[i][j] = lcs[i-1][j-1] + 1 max