# 距离编辑算法

java实现距离编辑算法，测试两个英文单词经最少次改变成为另一单词

import java.util.Scanner;

/**
*
* @author my
*距离编辑算法
*/

/**
*
* 伪代码：
* i from  0 to length of str1 +1
*   matrix[0][i]=i
* j from 0 to length of str2 +1
*   matrix[j][0]=j
*
* i from 1 to length of str1 +1
*   j from 1 to length of str2 +1
*     if str1[i]=str2[j]
*        d =0
*     else
*        d =1
*     matrix[i][j]=min(min(matrix[i][j-1]+1,matrix[i-1][j]+1),matrix[i-1][j-1]+d)
* print matrix
* return matrix[str1.length][str2.length]
*/

public class Levenshtein {
//找出两个数中最小数
public static int min(int firstNum,int secondNum){
return firstNum = firstNum<=
secondNum? firstNum:secondNum;
}

// i/o输入函数
public static void input(String firstStr,String secondStr){
System.out.println("输入两个字符串：");
Scanner in = new Scanner(System.in);
firstStr = in.next();
secondStr = in.next();
in.close();
}

//edit function to calculate distance
public static int edit(String firstStr,String secondStr,int[][]matrix){
//初始化
int len1 = firstStr.length()+1;
int len2 = secondStr.length()+1;
int i =0,j=0;

for(j=0;j<len1;j++){
matrix[j][0]=j;
}

for(i=0;i<len2;i++){
matrix[0][i]=i;
}
//填充matrix
for(i=1;i<len1;i++){
for(j=1;j<len2;j++){
int d = 0;
if(firstStr.charAt(i-1)!=secondStr.charAt(j-1))
d =1;
matrix[i][j]=min(min(matrix[i-1][j]+1,
matrix[i][j-1]+1),matrix[i-1][j-1]+d);
}
}

return matrix[len1-1][len2-1];

}

//打印函数
public static void print(int[][] matrix,int len1,int len2){
for(int i=0;i<len1;i++){
System.out.println();
for(int j=0;j<len2;j++){
System.out.print(" "+matrix[i][j]);
}
}
}

public static void main(String[] args){
String firstStr="";
String secondStr="";

System.out.println("输入两个字符串：");
Scanner in = new Scanner(System.in);
firstStr = in.next();
secondStr = in.next();
in.close();

int len1 = firstStr.length()+1;
int len2 = secondStr.length()+1;
int[][] matrix = new int[len1][len2];
int dis = edit(firstStr,secondStr,matrix);

print(matrix,len1,len2);
System.out.println();
System.out.println("distance: "+dis);
}

}

setting gettin

0 1 2 3 4 5 6
1 1 2 3 4 5 6
2 2 1 2 3 4 5
3 3 2 1 2 3 4
4 4 3 2 1 2 3
5 5 4 3 2 1 2
6 6 5 4 3 2 1
7 6 6 5 4 3 2

distance: 2

• 本文已收录于以下专栏：

## Levenshtein distance最小编辑距离算法实现

Levenshein distance，中文名为最小编辑距离，其目的是找出两个字符串之间需要改动多少个字符后变成一致。该算法使用了动态规划的算法策略，该问题具备最优子结构，最小编辑距离包含子最小编辑距...
• xanxus46
• 2014年08月19日 21:11
• 12978

## bk树：编辑距离算法

• nisxiya
• 2015年07月29日 00:51
• 1035

## 动态规划---最短编辑距离

• sdjzping
• 2013年10月17日 21:04
• 3624

## 网络层—距离矢量算法

• nineteen_
• 2015年12月28日 15:35
• 1664

## 最短编辑距离算法（字符串比较）

• wuxian90
• 2015年06月09日 13:22
• 1301

## 计算机网络1-距离矢量路由算法模拟

• bobo1356
• 2016年06月16日 23:42
• 1798

## 算法之常用的距离和相似度度量

• zxh19800626
• 2015年12月05日 23:46
• 637

## 距离矢量路由算法

• u013007900
• 2015年05月07日 19:23
• 3825

## 一种快速求点到线段距离的算法

点到直线的距离可以直接做垂线求取，但线段是有首尾点的，若要求距离则要考虑首尾点。    点和线段的关系大致可以有下面几种：      有特殊情况，是P点和A或B重合，否则，根据∠PAB或∠PB...
• yjukh
• 2010年01月19日 16:04
• 8586

## 编辑距离算法(java)

package editDistance; /** * 编辑距离(删除，添加，替换 得到相等字符串所需次数)算法 * s = "eeba", t="abac" * 使用一个二维数组记录所需编辑次...
• Yan456jie
• 2016年09月02日 20:20
• 2826

举报原因： 您举报文章：距离编辑算法 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)