写博客真的很有意思hhh。
这道题让我感觉到了动态规划的魅力。
//dp[i][j]是将含i个字符的A字符串转化为含j字符的B字符串所需要的最少步骤
//接下来是状态转移
//易得dp[i][j]=dp[i-1][j]+1;
//这里解释下为什么
//将含i-1个字符的A字符串进行转换成含j个字符的B字符串为dp[i-1][j]
//那么接下来还差最后一个字符我们就直接添加或删除
//因为i-1可能大于j也可能小于j的是吧
//当他大于j的时候就直接删除多余的那个就可以了
//小于的时候同理
//道理都是一样的
//那么如果是dp[i-1][j-1]呢
//显然我们不能忽略这种情况啊
//dp[i][j]=dp[i-1][j-1] +1或+0 这要看他们第i位和第j位的字符是否相等了
//理论存在实践开始
hhh,dfs里面的出口很有趣,不是吗?
在main函数里面我们把dp都搞成了-1,在函数的不断递归之下我们最终确定了某些值,见于第二行和第三行。
为什么仅仅通过这几行就可以构建一栋宏伟的大厦呢?
可以分析一下。
首先,以严密的逻辑确定了三种类型的子问题(见上文)
其次,不访我们想象一下,这道题最简单的情况不就是,0字符转换为字符串吗?
这毫无疑问是最简单的情况吧,其他所有的复杂情况都拜倒在他的石榴裙下,因此可以此情况来添砖加瓦,构成一栋大厦。
逻辑成立,就能成功。
这便是递归和动态转移的魅力~~。