算法学习——动态规划 例题:两字符串转换权最小问题(java)

题目 :

给定两个字符串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]&
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值