题目
描述
给定两个字符串str1和str2,再给定三个整数ic,dc和rc,分别代表插入、删除和替换一个字符的代价,请输出将str1编辑成str2的最小代价。
数据范围:
0≤∣str1∣,∣str2∣≤5000,
0≤ic,dc,rc≤10000
要求:空间复杂度 O(n),时间复杂度 O(nlogn)
思路
动态规划,上面对应删除,左边对应添加,左上对应替换。每次更新都要考虑最小代价。
代码
python版本:
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# min edit cost
# @param str1 string字符串 the string
# @param str2 string字符串 the string
# @param ic int整型 insert cost
# @param dc int整型 delete cost
# @param rc int整型 replace cost
# @return int整型
#
class Solution:
def minEditCost(self , str1: str, str2: str, ic: int, dc: int, rc: int) -> int:
# write code here
h = len(str1)
w = len(str2)
dp = [[0 for i in range(w+1)] for j in range(h+1)]
for i in range(h+1):
dp[i][0] = i * dc #第一列要删除
for j in range(w+1):
dp[0][j] = j * ic #第一行要插入
#左上是替换, 上是删除, 左是添加
for i in range(1, h+1):
for j in range(1, w+1):
tmp = 0 if str1[i-1]==str2[j-1] else 1
dp[i][j] = min([dp[i-1][j] + dc, dp[i-1][j-1] + tmp*rc, dp[i][j-1] + ic])
return dp[-1][-1]
c++版本:
无