最小编辑代价

给定两个字符串str1和str2,再给定三个整数ic、dc和rc分别代表插入、删除和替换一个字符的代价,返回将str1编辑成str2的最小代价。
【举例】
str1=“abc”,str2=“adc”,ic=5,dc=3,rc=2。
从“abc”编辑成“adc”,把’b’替换成’d’是代价最小的。所以返回2。
如果两个字符串一样,
不用编辑了,本来就是一样的字符串。所以返回0。

首先既然是str1变为str2,则dp矩阵纵列应该是str1  横列应该是str2,注意,填充0行 0列  作为空串,方便理解

比如

null     a     d     c
null     5    10   15
a         0    
b         3
c         6

这样既初始化完毕
思考dp[i][j]的意义
首选我们假设两个字符串 A   B
两个字符串末尾字符分别为Ae   Be  前面的子串位 Af  Bf
Af   Ae
Bf   Be
要让A变成B,首先知道,我们能了解的只有Af这一块变为B的任意子集的信息(当然前提是按照行来初始化)
所以可以看到,在已知Af任意转换位B的子集的信息情况下,A变为B有三种可能
1  Af变为B  然后删除Ae  
2 Af变为Bf  如果Ae不等于Be  替换
3A变为Bf   然后添加Be

以上就是这三种可能,所以状态转移方程为
dp[i][j]=min{dp[i-1][j]+delete_cost,dp[i-1][j-1]+exchange_cost,dp[i][j-1]+insert_cost}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值