【Python刷面试题】:校验员的工作量统计

本文介绍了一个用于统计文字校验员工作量的算法,通过对比校验前后的文章,计算出更改、删除或增加字符的最小操作次数。适用于仅包含数字和字母的文章校对场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值