天地无极,乾坤剑法

导航

 

题目描述

Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance。

Ex:

字符串A:abcdefg

字符串B: abcdef

通过增加或是删掉字符”g”的方式达到目的。这两种方案都需要一次操作。把这个操作所需要的次数定义为两个字符串的距离。

要求:

给定任意两个字符串,写出一个算法计算它们的编辑距离。

 

请实现如下接口

/*  功能:计算两个字符串的距离

 *  输入: 字符串A和字符串B

 *  输出:无

 *  返回:如果成功计算出字符串的距离,否则返回-1

 */

     public   static   int calStringDistance (String charA, String  charB)

    {

        return  0;

    }  

 

 

输入描述:

输入两个字符串

输出描述:

得到计算结果

示例1

输入

abcdefg
abcdef

输出

1

 代码如下:

 1 package com.yzh.xuexi;
 2 import java.util.Scanner;
 3 
 4 public class LevenshteinInstance {
 5 
 6     public static void main(String[] args) {
 7         Scanner scanner=new Scanner(System.in);
 8         while (scanner.hasNext()) {
 9             System.out.println(levenshteinInstance(scanner.nextLine(), scanner.nextLine()));
10         }
11         scanner.close();
12     }
13     //动态规划(参考标准Levenshtein算法)
14     private static  int levenshteinInstance(String a,String b) {
15         int alength=a.length();
16         int blength=b.length();
17         int in1,in2,in3,temp;
18         int[][]arr=new int[alength+1][blength+1];
19         
20         //当b串不存在时,距离随着a串的增长而增长(设置二维数组的初始边界值)
21         for(int  i=1;i<=alength;i++){
22             arr[i][0]=i;
23         }
24         //当a串不存在时,距离随着b串的增长而增长(设置二维数组的初始边界值)
25          for(int i=1;i<=blength;i++){
26              arr[0][i]=i;
27          }
28          for (int i = 1; i <= alength; i++) {
29             for (int j = 1; j <= blength; j++) {
30                 in1=arr[i][j-1]+1;//当a(i)和b(j-1)的距离已知,在a上插入
31                 in2=arr[i-1][j]+1;//当a(i-1)和b(j)的距离已知,在a上删除
32                 
33                 //当a(i-1)和b(j-1)的距离已知,如果a(i)==b(j),a(i)b(j)的距离等于a(i-1)b(j-1)的距离,否则加一
34                 if(a.charAt(i-1)==b.charAt(j-1)){
35                     in3=arr[i-1][j-1];
36                 }else {
37                     in3=arr[i-1][j-1]+1;
38                 }
39                 temp=Math.min(in1, in2);
40                 arr[i][j]=Math.min(temp, in3);
41             }
42         }
43          return arr[alength][blength];
44     }
45     
46     
47     
48 
49 }

参考:https://www.cnblogs.com/BlackStorm/p/5400809.html

 

 

 

 

1

 

posted on 2018-04-09 23:01  天地无极,乾坤剑法  阅读(132)  评论(0)    收藏  举报