编辑距离的求解方法和代码实现
2013-06-23 17:24
246 查看
关于编辑距离的讲解可以参考以下网址:/article/4882247.html
编辑距离就是一个字符串最少经过多少次操作步骤可以变化为另外一个字符串,操作方式包括:删除、添加、修改。删除和添加是自反的,即edit(i-1,j)+1或者edit(i,j-1)+1。后面的加1就是修改和添加的操作代价,修改是edit(i-1,j-1)+(0|1)。后面的加0或者加1是需要看第一个字符串的第i个字符和第二个字符串的第j个字符是否相等,相等就是不需要修改,所以加0,不相等就需要进行一步修改,需要加1.
具体的代码为
编辑距离就是一个字符串最少经过多少次操作步骤可以变化为另外一个字符串,操作方式包括:删除、添加、修改。删除和添加是自反的,即edit(i-1,j)+1或者edit(i,j-1)+1。后面的加1就是修改和添加的操作代价,修改是edit(i-1,j-1)+(0|1)。后面的加0或者加1是需要看第一个字符串的第i个字符和第二个字符串的第j个字符是否相等,相等就是不需要修改,所以加0,不相等就需要进行一步修改,需要加1.
具体的代码为
public class BiJiJuli { public static void main(String[] args){ System.out.println(editInstance("ergabd","abc")); } private static int min(int a,int b){ return a < b ? a : b; } private static int editInstance(String str1, String str2){ int max1 = str1.length(); int max2 = str2.length(); int[][] matrix = new int[max1+1][max2+1]; for( int i=0;i<max1+1;i++){ matrix[i][0] = i; } for(int i = 0;i<max2+1;i++){ matrix[0][i] = i; } for(int i=1;i<max1+1;i++){ for(int j=1;j<max2+1;j++){ int d = 1; int temp = min(matrix[i-1][j]+1,matrix[i][j-1]+1); if(str1.substring(i-1, i).equals(str2.substring(j-1,j))){ d = 0; } matrix[i][j] = min(temp,matrix[i-1][j-1]+d); } } return matrix[max1][max2]; } }
相关文章推荐
- 用非递归方法实现 求解字符串组合的问题 JAVA代码
- 文字编辑距离代码实现
- 文字编辑距离代码实现
- 线性方程组求解的几种常用方法-c++代码实现
- Ruby实现的最短编辑距离计算方法
- 编辑距离及代码实现
- C#.NET示例读写xml所有节点的代码实现方法和读取xml节点的数据总结
- UITableView实现选择框和编辑状态时cell向右移动的自定义方法
- 一行代码求解1-n的累加和(&实现)
- asp.net中将数据库绑定到DataList控件的实现方法与实例代码
- asp实现的可以提醒生日的几种方法附代码
- 快速排序中常见中轴选择方法及实现代码
- SA:T1编写主函数法和T2Matlab自带的SA工具箱GUI法,两种方法实现对二元函数优化求解——Jason niu
- Java实现字符串转换成可执行代码的方法
- JS-原生代码或方法实现特定效果总结(更新中...)
- Jquery中LigerUi的弹出编辑框(实现方法)
- android的HAL第二种调用hal方法中的APP 测试程序(属于APP层)代码的实现:
- php实现编辑和保存文件的方法
- android studio 设置代码编辑窗口背景颜色方法
- 用Maven插件生成Mybatis代码的实现方法