题解 | #编辑距离(二)#

编辑距离(二)

https://www.nowcoder.com/practice/05fed41805ae4394ab6607d0d745c8e4

解题思路:

如图

构造如图数组,表示从str1转换为str2消耗的资源;

第1行表示从空串转换为str2消耗的资源

第1列表示从str1转换为串消耗的资源

步骤1:

因为str1[2]=str2[2],不需要转换,所以消耗dp[3][3]=dp[2][2]

步骤2:

因为str1[1]!=str2[1],转换路径有三条,分别是:

1、先把str1[0-1]转换为str2[0],再插入一个str2[1],消耗为dp[2][1]+ic;

2、先把str1[0]转换为str2[0-1],再删除原来的str1[1],消耗为dp[1][2]+dc;

3、先把str1[0]转换为str2[0],再把str[1]替换为str2[1],消耗为dp[1][1]+rc;

在这三条路径中取最小值

依此类推


#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 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:
        length_1 = len(str1)
        length_2 = len(str2)
        res = 0
        dp = [[0 for i in range(length_2 + 1)] for i in range(length_1 + 1)]
        for i in range(length_1 + 1):
            for j in range(length_2 + 1):
                if j == 0:
                    dp[i][0] = i * dc
                elif i == 0:
                    dp[0][j] = j * ic
                elif str1[i-1] == str2[j-1]:
                    dp[i][j] = dp[i-1][j-1]
                else:
                    dp[i][j] = min(dp[i-1][j] + dc,dp[i][j-1] + ic,dp[i-1][j-1] + rc)
        
        print(dp)
        return dp[length_1][length_2]

全部评论

相关推荐

友友们,我实在是不太明白,校招的话现在大多也是提前实习,然后转正也是需要考核的,考核通过才能转正,那这跟实习转正有什么区别啊
苦闷的仰泳鲈鱼刷了1...:提前实习,是让你提前熟悉业务的,后续是入职后可以减少试用期的(大部分是包入职的);转正实习,要是hc不够或者其他原因,让你正式offer可能都没有,这个风险很大。 ---个人看法和了解到的。
点赞 评论 收藏
分享
立枫:整体内容太多了,实习经历太少了,以及格式行间距不统一
0offer是寒冬太冷还...
点赞 评论 收藏
分享
用微笑面对困难:你出于礼貌叫了人一声大姐,大姐很欣慰,她真把你当老弟
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务