如果想把word1变为word2,对于word1的操作我们有3种方式:

  • 删除一个字符
  • 添加一个字符
  • 修改一个字符

1、定义辅助数组

int[][] dp = new int[len1+1][len2+1]; dp[i][j]表示把str1的前i个字符变为str2的前j个字符所需要的最少编辑距离

2、关系

  1. word1[i]==word2[j] : 也就是说str1的第i个字符和str2的第j个字符相等,我们不需要修改word1的第i个字符,所以这时dp[i][j]=dp[i-1][j-1]
  2. 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
    alt

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的删除操作