如果想把word1变为word2,对于word1的操作我们有3种方式:
- 删除一个字符
- 添加一个字符
- 修改一个字符
1、定义辅助数组
int[][] dp = new int[len1+1][len2+1]; dp[i][j]表示把str1的前i个字符变为str2的前j个字符所需要的最少编辑距离
2、关系
- 当word1[i]==word2[j] : 也就是说str1的第i个字符和str2的第j个字符相等,我们不需要修改word1的第i个字符,所以这时dp[i][j]=dp[i-1][j-1]。
- 当word1[i]!=word2[j] : 有3种操作来计算dp[i][j];
- 删除:dp[i][j]=dp[i-1][j]+1。
- 添加:dp[i][j]=dp[i][j-1]+1
- 修改:dp[i][j]=dp[i-1][j-1]+1
dp[i][j] = Math.min(dp[i-1][j-1],Math.min(dp[i][j-1],dp[i-1][j]))+1;
3、初始化
if(i == 0)// 初始化,相当于word1的添加操作
if(j == 0)// 初始化,相当于word1的删除操作