LeetCode—72.Edit Distance
2015-11-03 16:55
232 查看
思路:动态规划。比较word1和word2各自位置上的某两个字符,如果这两个字符相等,那么答案等于各自去掉这个字符的答案,如果不等于,则等于增删改3种方法最小的那种+1。建立二维数组存储动态规划的结果。
public class Solution {
public int minDistance(String word1, String word2) {
int l1=word1.length();
int l2=word2.length();
if (l1*l2==0) {
return l1==0?l2:l1;
}
int[][] board=new int[l1+1][l2+1];
for (int i = 0; i < l1+1; i++) {
board[i][0]=i;
}
for (int i = 0; i < l2+1; i++) {
board[0][i]=i;
}
char[] c1=word1.toCharArray();
char[] c2=word2.toCharArray();
for (int i = 1; i < l1+1; i++) {
for (int j = 1; j < l2+1; j++) {
if (c1[i-1]==c2[j-1]) {
board[i][j]=board[i-1][j-1];
}else {
board[i][j]=Math.min(Math.min(board[i-1][j], board[i][j-1]), board[i-1][j-1])+1;
}
}
}
return board[l1][l2];
}
}
public class Solution {
public int minDistance(String word1, String word2) {
int l1=word1.length();
int l2=word2.length();
if (l1*l2==0) {
return l1==0?l2:l1;
}
int[][] board=new int[l1+1][l2+1];
for (int i = 0; i < l1+1; i++) {
board[i][0]=i;
}
for (int i = 0; i < l2+1; i++) {
board[0][i]=i;
}
char[] c1=word1.toCharArray();
char[] c2=word2.toCharArray();
for (int i = 1; i < l1+1; i++) {
for (int j = 1; j < l2+1; j++) {
if (c1[i-1]==c2[j-1]) {
board[i][j]=board[i-1][j-1];
}else {
board[i][j]=Math.min(Math.min(board[i-1][j], board[i][j-1]), board[i-1][j-1])+1;
}
}
}
return board[l1][l2];
}
}
相关文章推荐
- .gitignore文件
- hdu1695欧拉,容斥
- js中的字符长度问题
- JS中创建对象的几种方式。
- Android 双u盘方案
- C#中调用简单的R语言
- Cursor comments
- 内存的管理方式
- 有折扣的销售订单过账
- 团队项目选择结果
- iOS swift 语句只能写在函数体内
- 关于android的坑
- 制作可以 SSH 登录的 Docker 镜像
- Android学习路线指南
- 一些不常用但确非常有用的硬件信息查询命令
- c#通过 wsdl调用Webservice 源码
- 开始iOS 7中自动布局教程(一)
- android学习第八讲:Android的一个启动过程的分析
- 浅谈O2O行业的猎人与农夫【更新完毕】
- wait和waitpid详解