题解 | #编辑距离(一)#

编辑距离(一)

http://www.nowcoder.com/practice/6a1483b5be1547b1acd7940f867be0da

如果想把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的删除操作

全部评论

相关推荐

酷酷的喜马拉雅山:感觉这比一直在初筛不动的好多了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务