解题思路: 动态规划 1.dp[i][j]定义 字符串str1[0~i]编辑成字符串str2[0~j]的需要的最小编辑代价 2.状态转移方程 当str2[i] == str1[j],dp[i][j] = dp[i-1][j-1] 当str2[i] != str1[j],dp[i][j] = min(dp[i][j-1]+ic, dp[i-1][j]+dc, dp[i-1][j-1]+rc) # 插入、删除、替换比小 3.边界 dp[0][0] = 0 dp[0][j] = j*ic,j次插入 dp[i][0] = i*dc,i次删除 #============================================================================================= ''' # # 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 , str2 , ic , dc , rc ): # write code here r = len(str1) c = len(str2) dp = [[0]*(c+1) for _ in range(r+1)] for i in range(r+1): for j in range(c+1): if i==0 and j==0: dp[i][j]=0 elif i==0: dp[0][j] = j*ic # j变化插入操作 elif j==0: dp[i][0] = i*dc # i变量删除操作 else: if str1[i-1]==str2[j-1]: dp[i][j] = dp[i-1][j-1] # 对应字符相等则代价不变,如不等则需替换操作 else: dp[i][j] = min(dp[i][j-1]+ic, dp[i-1][j]+dc, dp[i-1][j-1]+rc) # 插入、删除、替换比小 for i in dp: print(i) return dp[-1][-1] s = Solution() str1 = 'abc' str2 = 'adc' ic = 5 dc = 3 rc = 100 print(s.minEditCost(str1,str2,ic,dc,rc))