题目一:
题目描述
你的团队最近更新了语音识别的算法,瑰需要对更新之后的算法模型进行识别率指标统计。 语音识别率指标通常为WER(Word Error Rate)即计算语音识别文本中出现错误的字总数占标准文本中总字数的比例。为了使识别出来的文本序列和标准的文本序列之间保持一致,需要进行替换,删除,或者插入某些字。 这些插入,替换,删除的字的总个数,除以标准的文本词序列中字的个数的百分比,即为WER。
现需要你根据标准文本对识别结果进行错误统计,计算每句识别结果的总错误数量。
输入描述
第一行输入:标准文本(汉字用空格分隔) 第二行输入:识别文本(汉字用空格分隔)
输出描述
输出:识别文本的总错误数,即插入错误数+删除错误数+替换错误数
备注:可能存在同一个输入,有多组插入错误、删除错误以及替换错误的组合情况,此时输出多组里面的最小之和即可
示例1
输入
‘我不在科大讯飞工作’
‘我在科大讯飞工作’
输出
1
备注
插入错误示例:‘我在科大讯飞工作’->‘我不在科大讯飞工作’(识别文本中第2个’不’字为识别出的多余/插入内容,为1个插入错误);
删除错误示例:‘我在科大讯飞工作’->‘我再科大讯飞工作’(标准文本中的’在’被识别为了’再’,为1个替换错误)。
def minDistance(s1, s2):
m, n = len(s1), len(s2)
memo = [[-1] * n for _ in range(m)]
return dp(s1, m - 1, s2, n - 1, memo)
def dp(s1, i, s2, j, memo):
if i == -1:
return j + 1
if j == -1:
return i + 1
if memo[i][j] != -1:
return memo[i][j]
if s1[i] == s2[j]:
memo[i][j] = dp(s1, i - 1, s2, j - 1, memo)
else:
memo[i][j] = min(
dp(s1, i, s2, j - 1, memo) + 1, # 插入
dp(s1, i - 1, s2, j, memo) + 1, # 删除
dp(s1, i - 1, s2, j - 1, memo) + 1 # 替换
)
return memo[i][j]
if __name__ == "__main__":
# s1 = input()
# s2 = input()
s1 = '我不在科大讯飞工作'
s2 = '我在在在在在在在在科大讯飞工作'
print(minDistance(s1, s2))
7
AC 40%,leetcode AC100%,欢迎交流!
题目二:
题目描述
输入一个2行n列(1≤n≤1e5)的矩阵a(1≤a[i][j]≤1e9)。你需要从矩阵中选择一些数,要求任意两数不能左右相邻,也不能上下相邻。求所选数字之和的最大值。
示例1
输入
[[9,3,5,7,3],[5,8,1,4,5]]
输出
29
示例2
输入
[[1,2,9]],[10,1,1]]
输出
19
示例3
输入
[[7],[4]]
输出
7
def maxSum(nums):
n = len(nums[0])
dp = [[0] * n for i in range(2)]
dp[0][0] = nums[0][0]
dp[1][0] = nums[1][0]
for i in range(1, n):
dp[0][i] = max(dp[0][i-1], dp[1][i-1] + nums[0][i])
dp[1][i] = max(dp[1][i-1], dp[0][i-1] + nums[1][i])
return max(dp[0][-1], dp[1][-1])
if __name__ == '__main__':
data = [
[[9,3,5,7,3],[5,8,1,4,5]],
[[1,2,9], [10,1,1]],
[[7],[4]]
]
for nums in data:
print(maxSum(nums))
29
19
7
AC 100%