-
Notifications
You must be signed in to change notification settings - Fork 0
72. Edit Distance
Linjie Pan edited this page Apr 13, 2019
·
3 revisions
we use a array dist to save the minimum distance of substring of word1 and word2, i.e., dist[i][j] denotes the minimum distance of word1.substring(0, i) and word2.substring(0, j).
Apparently, dist[0][j] = j and dist[i][0] = i.
When we calculate dist[i][j], we first compare word1[i] and word2[j], if word1[i] equals word2[j], then dist[i][j] equals dist[i - 1][j - 1]. If word1[i] != word2[j], then we have three operations:
- replace word1[i] with word2[j] (
dist[i - 1][j - 1] + 1) - delete word1[i] (
dist[i - 1][j] + 1) - delete word2[j] (
dist[i][j - 1] + 1)
Note that insert and delete are symmetric operations, so we choice 2 is equal to insert character to word2 and choice 3 is equal to insert character to word1.
public int minDistance(String word1, String word2) {
int dist[][] = new int[word1.length() + 1][word2.length() + 1];
for(int i = 0; i < word1.length(); i++)
dist[i + 1][0] = i + 1;
for(int i = 0; i < word2.length(); i++)
dist[0][i + 1] = i + 1;
for(int i = 0; i < word1.length(); i++) {
for(int j = 0; j < word2.length(); j++) {
if( word1.charAt(i) == word2.charAt(j) )
dist[i + 1][j + 1] = dist[i][j];
else
dist[i + 1][j + 1] = Math.min(Math.min(dist[i][j + 1], dist[i + 1][j]) + 1, dist[i][j] + 1);
}
}
return dist[word1.length()][word2.length()];
}