Easy Understanding Java Solution using DP with memorization (beats about 99% solutions)
\n    public int minDistance(String word1, String word2) {\n        char[] w1 = word1.toCharArray(), w2 = word2.toCharArray();\n        int[][] memo = new int[w
\n    public int minDistance(String word1, String word2) {\n        char[] w1 = word1.toCharArray(), w2 = word2.toCharArray();\n        int[][] memo = new int[w1.length+1][w2.length+1];\n        return minDistanceHelper(w1, w2, 0, 0, memo);\n    }\n    \n    public int minDistanceHelper(char[] w1, char[] w2, int w1Index, int w2Index, int[][] memo) {\n        if(w1Index == w1.length) return w2.length - w2Index;\n        if(w2Index == w2.length) return w1.length - w1Index;\n\n        if(memo[w1Index][w2Index] != 0) return memo[w1Index][w2Index];\n\n        if(w1[w1Index] == w2[w2Index]) {\n            memo[w1Index][w2Index] = minDistanceHelper(w1, w2, w1Index+1, w2Index+1, memo);\n        } else {\n            int opt1 = minDistanceHelper(w1, w2, w1Index+1, w2Index, memo);\n            int opt2 = minDistanceHelper(w1, w2, w1Index, w2Index+1, memo);\n            int opt3 = minDistanceHelper(w1, w2, w1Index+1, w2Index+1, memo);\n            memo[w1Index][w2Index] = Math.min(opt1, Math.min(opt2, opt3)) + 1;\n        }\n        return memo[w1Index][w2Index];\n    }
['Memoization', 'Java']