LeetCode 72 Edit Distance
来源:互联网 发布:源码建网站 编辑:程序博客网 时间:2024/05/21 04:00
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
思路:从两个词的第m,n往前开始比较,刚开始,就是从词尾开始往前逐个字符比较。使用动态数组dp[m][n]记录word1.subString(0,m)和word2.subString(0,n)的minDistance。
删除操作:如果word1进行了删除操作,则递归调用minDist(w1,w2,dp,m-1,n),因为word1删除了1位,所以要前进一位,因此m-1,而n不变。反之word2进行删除操作的话,递归调用minDist(w1,w2,dp,m,n-1).
更新操作:如果word1.subString(0,m)在词尾进行了更新操作,则更新完之后就和word2的词尾相同了,word1和word2都前进一位继续比较,递归调用minDist(w1,w2,dp,m-1,n-1)。更新word2.subString(0,n)的词尾亦然。
插入操作:如果word1.subString(0,m)在词尾进行了插入操作,则插入之后就和word2的词尾相同了,word1因为后面插入了一个字符,因此无需前进,word2前进一位,二者再继续比较,递归调用minDist(w1,w2,dp,m,n-1)。更新word2.subString(0,n)的词尾亦然。反之word2后面若插入一个字符,则递归调用minDist(w1,w2,dp,m-1,n)。
Runtime: 7 ms runtime beats 99.10% of java submissions
public int minDistance(String word1, String word2) {if (word1 == null || word1.length() == 0) return word2.length();char[] w1 = word1.toCharArray(), w2 = word2.toCharArray();int dp[][] = new int[word1.length() + 1][word2.length() + 1];return minDist(w1, w2, dp, word1.length(), word2.length());}public int minDist(char[] w1, char[] w2, int[][] dp, int m, int n) {if (m == 0) return n;if (n == 0) return m;if (dp[m][n] != 0) return dp[m][n];if (w1[m - 1] == w2[n - 1]) return dp[m][n] = minDist(w1, w2, dp, m - 1, n - 1);return dp[m][n] = 1 + Math.min(minDist(w1, w2, dp, m, n - 1), Math.min(minDist(w1, w2, dp, m - 1, n), minDist(w1, w2, dp, m - 1, n - 1)));}
算法自https://discuss.leetcode.com/topic/49414/simple-7-ms-java-solution
- LeetCode(72)Edit Distance
- LeetCode 72 Edit Distance
- [leetcode 72] Edit Distance
- [leetcode] 72 Edit Distance
- leetcode || 72、Edit Distance
- Edit Distance Leetcode 72
- Edit Distance - LeetCode 72
- leetcode 72:Edit Distance
- [leetcode 72]Edit Distance
- leetcode 72: Edit Distance
- 【Leetcode】Edit Distance #72
- Leetcode#72||Edit Distance
- leetcode 72:Edit Distance
- LeetCode 72 Edit Distance
- leetcode 72 Edit Distance
- Leetcode (72) Edit Distance
- LeetCode 72 Edit Distance
- Leetcode Edit Distance 72
- C++模板二段名字查找
- 分享记录我的Linux系统入门学习经验
- zk相关命令行总结
- cl.exe link.exe用法详解
- 级联查询
- LeetCode 72 Edit Distance
- Java i++ 分析
- C#与Sybase链接详解
- lua调用java java调用lua[转载]
- Android版:MOB短信验证码中验证手机号码的正则表达式
- javascript基础笔记(一)
- 常用排序算法
- SVN服务器搭建和使用
- 渠道变革怎么走?TCL胡学军说,打通高端通道是关键