两个字符串间的最短路径问题

566 篇文章

已下架不支持订阅

472 篇文章

已下架不支持订阅

题目解析

本题可以通过动态规划来求解:

我们假设dp[i][j]表示(0,0)到(i,j)的最短距离,那么这个最短距离只可能来自三个方向:

  • dp[i-1][j],当前点的上方点
  • dp[i][j-1],当前点的左边点
  • dp[i-1][j-1],当前点的左上方点

而存在推导式如下:

dp[i][j] = min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1]) + 1

另外需要注意的是,上面推导式dp[i-1][j-1]参与比较是有前提条件的,即如果(i-1, j-1)点和(i,j)点之间存在斜线相连时,才能将dp[i-1][j-1]带入上面推导式,否则不能带入。

并且上面推导式还可以优化,如果当前点可以向三个方向扩散:

  • 向右
  • 向下
  • 向右下

那么向右和向下是否有必要扩散呢?比如下图

从(1,1)处可以向三个方向扩散,此时可以看出扩散后的三个新位置X,Y,Z,其中Y要比X,Z更靠近右下角点。

那么有没

已下架不支持订阅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿甘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值