Difficulty: Hard
Given two words word1 and word2, find the minimum number of operations required to convert word1 to word2.
You have the following 3 operations permitted on a word:
- Insert a character
- Delete a character
- Replace a character
Example 1:
| 12
 3
 4
 5
 6
 
 | Input: word1 = "horse", word2 = "ros"Output: 3
 Explanation:
 horse -> rorse (replace 'h' with 'r')
 rorse -> rose (remove 'r')
 rose -> ros (remove 'e')
 
 | 
Example 2:
| 12
 3
 4
 5
 6
 7
 8
 
 | Input: word1 = "intention", word2 = "execution"Output: 5
 Explanation:
 intention -> inention (remove 't')
 inention -> enention (replace 'i' with 'e')
 enention -> exention (replace 'n' with 'x')
 exention -> exection (replace 'n' with 'c')
 exection -> execution (insert 'u')
 
 | 
Solution
Language: Java
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 
 | class Solution {public int minDistance(String word1, String word2) {
 if (word1 == null || word2 == null) {
 return 0;
 }
 int m = word1.length();
 int n = word2.length();
 int[][] dp = new int[m + 1][n + 1];
 for (int i = 0; i <= n; i++) {
 dp[0][i] = i;
 }
 for (int j = 1; j <= m; j++) {
 dp[j][0] = j;
 }
 for (int i = 1; i <= m; i++) {
 for (int j = 1; j <= n; j++) {
 if (word1.charAt(i - 1) == word2.charAt(j - 1)) {
 dp[i][j] = Math.min(dp[i - 1][j - 1], Math.min(dp[i - 1][j], dp[i][j - 1]) + 1);
 } else {
 dp[i][j] = Math.min(dp[i - 1][j - 1], Math.min(dp[i - 1][j], dp[i][j - 1])) + 1;
 }
 }
 }
 return dp[m][n];
 }
 }
 
 |