Leetcode : Edit Distance
来源:互联网 发布:软件系统可靠性设计 编辑:程序博客网 时间:2024/06/05 03:54
URL https://leetcode.com/problems/edit-distance/description/
题目大意:
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
解题思路
本题思路是 dp[i,j] 表示word1(1,i)转化为word2(1,j)所用最小操作次数。则有下面的几种情况:
1. word1[i]==word2[j] 则 dp(i,j) = dp(i-1,j-1) 即可。
2. word1[i]!=word2[j] 则我们有三种操作,
2.1 替换word1[i] ,dp(i,j) = dp(i-1,j-1)+1
2.2 删除操作word1[i] ,dp(i,j) = dp(i-1,j)+1
2.3 增加到word1尾部 ,dp(i,j) = dp(i,j-1)+1
下面给出代码
class Solution { public int minDistance(String word1, String word2) { int len1 = word1.length(); int len2 = word2.length(); int [][] dp = new int[len2+1][len1+1]; for(int i=0;i<=len1;i++){ dp[0][i] = i; } for(int i=0;i<=len2;i++){ dp[i][0] = i; } for(int i=1;i<=len2;i++){ for(int j=1;j<=len1;j++){ if(word1.charAt(j-1)==word2.charAt(i-1)){ dp[i][j] = dp[i-1][j-1]; }else{ dp[i][j] = Math.min(dp[i-1][j-1],dp[i-1][j]); dp[i][j] = Math.min(dp[i][j],dp[i][j-1]); dp[i][j]++; } } } return dp[len2][len1]; }}
我们其实可以用一个一维数组搞定。
class Solution { public int minDistance(String word1, String word2) { return simpleMethod(word1,word2); } public int simpleMethod(String word1,String word2){ int len1 = word1.length(); int len2 = word2.length(); int []dp = new int[len1+1]; int tmp = 1,value = 0; if(len1==0) return len2; if(len2==0) return len1; for(int i=0;i<=len1;i++){ dp[i] = i; } for(int i=1;i<=len2;i++){ tmp = i; for(int j=1;j<=len1;j++){ if(word1.charAt(j-1)==word2.charAt(i-1)){ value = dp[j-1]; }else{ value = Math.min(tmp,dp[j]); value = Math.min(dp[j-1],value); value++; } dp[j-1] = tmp; tmp = value; } dp[len1] = value; } return dp[len1]; }}
阅读全文
0 0
- LeetCode: Edit Distance
- LeetCode Edit Distance
- LeetCode: Edit Distance
- [Leetcode] Edit Distance
- leetcode 19: Edit Distance
- [LeetCode] Edit Distance
- [Leetcode] Edit Distance
- LeetCode Edit Distance
- [LeetCode] Edit Distance
- [LeetCode]Edit Distance
- Leetcode: Edit Distance
- [leetcode]Edit Distance
- LeetCode-Edit Distance
- [leetcode] Edit Distance
- LeetCode - Edit Distance
- leetcode之Edit Distance
- leetcode edit distance
- 【leetcode】Edit Distance
- Java设计模式-策略模式
- BZOJ1123 BLO [Tarjan][点双连通分量]
- 标准盒子模型和IE盒子模型
- SQL一般面试题
- centos7更新系统内核及软件
- Leetcode : Edit Distance
- Realm For Android详细教程
- CentOS命令
- 现阶段学习计划
- python:pandas(5),层次化索引
- 所见即所得:四款免编程移动游戏开发引擎推荐
- 作业
- Codeforces847K Travel Cards
- PHP实现限制域名从而保护源代码不被拷贝