题解 | #编辑距离(一)#
编辑距离(一)
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、关系
- 当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的删除操作
查看18道真题和解析
老板电器公司氛围 197人发布