题目 :
给定两个字符串str1和str2,再给定三个整数ic,dc和rc,分别代表插入, 删除和替换一个字符的代价。返回将str1编辑成str2的最小代价。比如,str1="abc",str2="adc",ic=5,dc=3,rc=2.从"abc"编辑成adc, 吧b替换成d是代价最小的所以返回2.再比如,str1="abc",str2="adc",ic=5,dc=3,rc=100.从abc编辑成adc,先删除d,然后插入d是代价最小的, 所以返回8.
动态规划:
假设str1的长度为m,str2的长度为N,首先生成大小为(M+1)*(n+1)的矩阵dp,dp[i][j]的值代表str1[0...i-1]编辑成str2[0....j-1] 的最小代价,
思想理解(本人的通俗理解):
动态规划无非就是动态的决定下一步的走向,不断规划下面的方向然后得到所想要的解; 如本题首先我们可以把第一行第一列求出来非常简单。 第一行就是用str1的第一个字符编辑成str2[j]所以就是i*ic 第一列就是用str2用str[i]的所有字符编辑成str2[0]所以就是i*dc dp[i][j]后面的就想办法如何用之前的转换而来,如下图为了方便大家看我把dp打印出来 情况1: 以dp[3][2]来看假设已经到了3,2我们如何来进行得到这个最小代价呢,首先它的前面dp[i][j-1](j-1)是一样的str1[0...i]组成了str2[0...j-1] 现在需要组成str2[0...j]个字符现在得到了str2[0...j-1]然后再加一个字符也就是加上str2[j]则就编辑成了str2[0....j]递推式就是 dp[i][j]=dp[i][j-1]&