[LeetCode]72. 编辑距离(java实现)dp
1. 题目
2. 读题(需要重点注意的东西)
思路(dp):
注意: 在修改
这种情况中,前提A[1 ~ i-1]与B[1 ~ j-1]是相等的,当A[i] != B[j] 时,才需要进行修改,否则不需要修改,所以方案数可能加1,可能加0
3. 解法
---------------------------------------------------解法---------------------------------------------------:
class Solution {
public int minDistance(String word1, String word2) {
int n = word1.length();
int m = word2.length();
word1 = " " + word1;
word2 = " " + word2;
int[][] f = new int[n+1][m+1];
// 初始化,当B为0时候,A变为B要操作的次数为A的长度
for(int i = 0;i <= n;i++) f[i][0] = i;
// 初始化,当A为0时候,A变为B要操作的次数为B的长度
for(int i = 0;i <= m;i++) f[0][i] = i;
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++){
// 删除和添加的情况
f[i][j] = Math.min(f[i-1][j],f[i][j-1])+1;
// 修改的情况
int t = word1.charAt(i) == word2.charAt(j) ? 0 : 1;
f[i][j] = Math.min(f[i][j],f[i-1][j-1] + t);
}
}
return f[n][m];
}
}
可能存在的问题:
4. 可能有帮助的前置习题
5. 所用到的数据结构与算法思想
- 动态规划