DNA序列编辑距离
线性动态规划
为dna1前i个字符和dna2的前j个字符相等的最小编辑步骤
当时
此时 不需要进行编辑
def solution(dna1, dna2):
n = len(dna1)
m = len(dna2)
f = [[0] * (m + 1) for _ in range(n + 1)]
# 初始化边界条件
for i in range(n + 1):
f[i][0] = i
for j in range(m + 1):
f[0][j] = j
# 动态规划计算编辑距离
for i in range(1, n + 1):
for j in range(1, m + 1):
if dna1[i - 1] == dna2[j - 1]:
f[i][j] = f[i - 1][j - 1]
else:
f[i][j] = min(f[i - 1][j] + 1, f[i][j - 1] + 1, f[i - 1][j - 1] + 1)
return f[n][m]
if __name__ == "__main__":
# 你可以添加更多的测试用例
print(solution("AGCTTAGC", "AGCTAGCT") == 2)
print(solution("AGCCGAGC", "GCTAGCT") == 4)