Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (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 character
import java.util.*;
import java.math.*;
import java.lang.*;
import java.io.*;
class Test {
public static void main(String[] args) {
String s1 = "bc";
String s2="ab";
Test test = new Test();
int a = test.minDistance(s1, s2);
System.out.println(a);
}
public int minDistance(String s1, String s2) {
int lens1 = s1.length();
int lens2 = s2.length();
char[] ss1 = s1.toCharArray();
char[] ss2 = s2.toCharArray();
int[][] dp = new int[lens1+1][lens2+1];
for(int i=1;i<=lens1;i++) dp[i][0] = i;
for(int j=1;j<=lens2;j++) dp[0][j] = j;
for(int i=1;i<=lens1;i++) {
for(int j=1;j<=lens2;j++) {
if(ss1[i-1]==ss2[j-1]) {
dp[i][j] = dp[i-1][j-1];
}else {
dp[i][j] = Math.min(Math.min(dp[i-1][j-1]+1, dp[i-1][j]+1), dp[i][j-1]+1);
}
}
}
return dp[lens1][lens2];
}
}
参考资料:
- Lecture Slides: Minimum Edit Distance