Q:
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
Solution:
public class Solution {
public int minDistance(String word1, String word2) {
if (word1.equals(word2))
return 0;
if (word1.length() == 0 || word2.length() == 0)
return word1.length() == 0? word2.length(): word1.length();
int n1 = word1.length();
int n2 = word2.length();
// dp[i][j] means the minimum steps needed to transform from word1(0, i) to word2(0, j)
int[][] dp = new int[n1+1][n2+1];
dp[0][0] = 0;
for (int i = 1; i <= n1; i++)
dp[i][0] = i;
for (int i = 1; i <= n2; i++)
dp[0][i] = i;
for (int i = 1; i <= n1; i++) {
for (int j = 1; j <= n2; j++) {
if (word1.charAt(i-1) == word2.charAt(j-1))
dp[i][j] = dp[i-1][j-1];
else {
dp[i][j] = Math.min(Math.min(dp[i-1][j], dp[i][j-1]), dp[i-1][j-1]) + 1;
}
}
}
return dp[n1][n2];
}
}