问题描述:
A是一篇杂志的文字校验员,负责改正文章里面的错字错句,我们要实现一个程序来统计A一天的工作量。A的操作分为三类:更改一个字、删除一个字或者增加一个字,我们需要通过对比校验前后的文章统计A最小需要操作多少次。为简化,我们假设文章的每行只包含数字和字母,不含空格等特殊字符。
输入描述:
每一行输入为正整数N,表示文章的总行数(0<N<=10000)
后面N行,为校验前的文章
再后面N行,为校验后的文章
示例1:
输入
2
abcdef
123456
bcdg
234567
输出
5
说明
删除了a,用g替换了e,删除了f,删除了1,增加了7,共操作5次
代码
import sys
N = int(sys.stdin.readline().strip())
M1 = []
for _ in range(N):
line = sys.stdin.readline().strip()
M1.append(line)
M2 = []
for _ in range(N):
line = sys.stdin.readline().strip()
M2.append(line)
def search(s, t):
dp = [[0]*(len(t)+1) for _ in range(len(s) + 1)]
for i in range((len(s)+1)):
dp[i][0] = i
for i in range(len(t)+1):
dp[0][i] = i
for i in range(1, len(s)+1):
for j in range(1, len(t)+1):
if s[i - 1] == t[j - 1]:
dp[i][j] = dp[i - 1][j - 1]
else:
dp[i][j] = min(dp[i - 1][j - 1], dp[i][j - 1], dp[i - 1][j]) + 1
return dp[len(s)][len(t)]
ans = 0
for i in range(N):
ans += search(M1[i], M2[i])
print(ans)