偶然看到这道经典题,顺便复习下DP,
由于懒得做图,所以,需要图片或者其他讲法,请参考这篇https://blog.youkuaiyun.com/chichoxian/article/details/53944188。 可能你需要配合这位作者的图片才能更好理解
有两个字符串str1跟str2, 设他们的最短距离为str1变为str2的操作最小次数,有以下三种操作
1. 插入字符,如abc -> abcd
2. 删除字符 ,如abc -> ac
3. 替换字符, 如abc -> adc
输入两个字符串,请计算两个字符串的最短距离
由于我们发现,一个字符串中,所有子字符串(或者说字符)都可能有以上操作,所有此问题具有重复子问题。
这是一道经典的dp算法, 设i为str1[:i], str2[:j](python表达方法,str[:i]意味着str[0]到str[i], 读者注意str[i]是一个字符,str[:i]是一个子字符串)
状态
dp[i][j]定义为str1[:i]到str2[:j]的最短距离
思路是这样的,先考虑最后一步,此时i是str1的最后一个字符,j是str2的最后一个字符, 那么有几种可能
1. str1