1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class Solution { int[][] dp;
public int minDistance(String word1, String word2) { int n = word1.length(); int m = word2.length(); dp = new int[n][m]; for (var arr : dp) { Arrays.fill(arr, -1); } return dfs(word1, word2, word1.length()-1, word2.length()-1); }
private int dfs(String word1, String word2, int i, int j) { if (i < 0) { return j + 1; } if (j < 0) { return i + 1; } if (dp[i][j] != -1) return dp[i][j]; if (word1.charAt(i) == word2.charAt(j)) { return dp[i][j] = dfs(word1, word2, i-1, j-1); } else { return dp[i][j] = Math.min(dfs(word1, word2, i-1, j-1), Math.min( dfs(word1, word2, i, j-1), dfs(word1, word2, i-1, j))) + 1; } } }
|