题目描述
给定两个字符串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=10,从"abc"编辑到"adc",先删除b再插入d代价最小,为8;
分析
假设str1长度为M[0.....M-1],str2长度为N[0.......N-1],dp大小为(M+1)*(N+1);
dp[i][j]表示str1[0......i-1]编辑成str2[0......j-1]的最小编辑代价,dp大小为(M+1)*(N+1)是为了从空串开始计算,即dp[0][0]表示空串编辑到空串的最小编辑代价。
如何生成dp[][]:
- dp[0][0]表示空串编辑成空串,故dp[0][0]=0;
- 求第一行dp[0][j],空串编辑成str2[0....j-1],则dp[0][j]=ic*j;
- 求第一列dp[i][0],str1[0......i-1]编辑成空串,则dp[i][0]=dc*i;
- 求dp[i][j],即str1[0....i-1]编辑成str2[0.....j-1],