583.两个字符串的删除操作
- 感觉很难,没有什么想法
- 编辑距离类型题目,仅有删除操作,与上题不同的是,两个数组都可以执行删除操作
- 二维dp含义:
dp[i][j]
以i-1结尾的word1
和以j-1结尾的word2
,为了让这两个字符串相同的最少操作次数 - 递推公式(从什么方向推出):
- 当前元素相同(无需删除),考不考虑该元素的删除操作不受影响,
dp[i][j] = dp[i-1][j-1]
- 当前元素不同,1-删除
word1
;2-删除word2
;3-都删了;dp[i][j] = min(dp[i-1][j]+1, min(dp[i][j-1]+1, dp[i-1][j-1]+2))
- 当前元素相同(无需删除),考不考虑该元素的删除操作不受影响,
- 初始化:由三个方向推导,因此第一行第一列都要初始化
- 另外思路,寻找最长公共子序列
72.编辑距离
- 前面都是在删除,这题中还加入了替换和增加
- 操作word1和word2是一样的,混合操作也是可以的
- 还是二维数组,数组定义方式同上
- 删除、添加操作在递推公式里面操作的表达方式相同,递推公式不变;不同的是替换操作,上一题中存在两个字符串都删除的情况,本题中不需要都删除了,只要替换其中一个就可以了,因此是
dp[i-1][j-1]+1
编辑距离总结
- 判断子序列:只需要考虑其中一个字符串的删除情况
- 不同的子序列:也只需要考虑其中一个字符串的删除情况,但是递推公式要注意,递推公式要情况数值累加***(不太清楚)***
- 两个字符串的删除操作:两个字符串都可以进行删除情况,分别删除和同时删除
- 编辑距离:两个字符串都可以进行删除、增加、替换操作,其中删除和增加在递推公式表达上一样,上一题的两个字符串同时删除被本题的字符串替换替代