Given two words word1 and word2, find the minimum number of steps required to convert word1 toword2. (each operation is counted as 1 step.)You have the following 3 operations permitted on a word:a) Insert a character b) Delete a character c) Replace a characterint minDistance(string word1, string word2)
题目描述:
给定两个单词word1和word2,找到最小的修改步数,把word1转换成word2
每一个操作记为一步
允许在一个word上进行如下3种操作:
a) 插入一个字符
b) 删除一个字符
c) 替换一个字符
编辑距离(Edit Distance):
是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。
动态规划:
替换
F(i,j) :F(i-1,j-1)+(wd1[i] == wd2 [j] ? 0 : 1 )
插入
F(i,j) :F(i,j-1)+1
删除
F(i,j):F(i-1,j)+1
初始:
F(0,j)= j ;
F(i,0)= i ;
import java.util.*;
public class Solution {
public int minDistance(String word1, String word2) {
int row = word1.length();
int col = word2.length();
int [][]minDis = new int [row][col];
if(row == 0 || col == 0){
return 0;
}
for(int i = 0;i <=row ;i++){
minDis [i][0] = i;
}
for(int j = 0;j <= col;j++){
minDis[0][j]= j;
}
for(int i = 1;i <= col;++i){
for(int j = 1;j <= row;++j){
//和插入删除选最小
// minDis[i][j] = Math.min(minDis[i][j-1],minDis[i-1],[j]);
//与替换比较
if(word1.charAt(i-1)== word2.charAt(j-1)){
minDis[i][j] = 1+Math.min(minDis[i][j],minDis[i-1][j-1]);
}else{
minDis[i][j] = 1+Math.min (1+minDis[i][j],minDis[i-1][j-1])+1;
}
}
}
return minDis[row][col];
}
}