题目描述

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

代码如下:

 package com.yzh.xuexi;
import java.util.Scanner; public class LevenshteinInstance { public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while (scanner.hasNext()) {
System.out.println(levenshteinInstance(scanner.nextLine(), scanner.nextLine()));
}
scanner.close();
}
//动态规划(参考标准Levenshtein算法)
private static int levenshteinInstance(String a,String b) {
int alength=a.length();
int blength=b.length();
int in1,in2,in3,temp;
int[][]arr=new int[alength+1][blength+1]; //当b串不存在时,距离随着a串的增长而增长(设置二维数组的初始边界值)
for(int i=1;i<=alength;i++){
arr[i][0]=i;
}
//当a串不存在时,距离随着b串的增长而增长(设置二维数组的初始边界值)
for(int i=1;i<=blength;i++){
arr[0][i]=i;
}
for (int i = 1; i <= alength; i++) {
for (int j = 1; j <= blength; j++) {
in1=arr[i][j-1]+1;//当a(i)和b(j-1)的距离已知,在a上插入
in2=arr[i-1][j]+1;//当a(i-1)和b(j)的距离已知,在a上删除 //当a(i-1)和b(j-1)的距离已知,如果a(i)==b(j),a(i)b(j)的距离等于a(i-1)b(j-1)的距离,否则加一
if(a.charAt(i-1)==b.charAt(j-1)){
in3=arr[i-1][j-1];
}else {
in3=arr[i-1][j-1]+1;
}
temp=Math.min(in1, in2);
arr[i][j]=Math.min(temp, in3);
}
}
return arr[alength][blength];
} }

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

1

解题(LevenshteinInstance--Levenshtein距离)的更多相关文章

  1. 字符串编辑距离(Levenshtein距离)算法

    基本介绍 Levenshtein距离是一种计算两个字符串间的差异程度的字符串度量(string metric).我们可以认为Levenshtein距离就是从一个字符串修改到另一个字符串时,其中编辑单个 ...

  2. Spark Java API 计算 Levenshtein 距离

    Spark Java API 计算 Levenshtein 距离 在上一篇文章中,完成了Spark开发环境的搭建,最终的目标是对用户昵称信息做聚类分析,找出违规的昵称.聚类分析需要一个距离,用来衡量两 ...

  3. 51nod 1183 - 编辑距离 - [简单DP][编辑距离问题][Levenshtein距离问题]

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183 编辑距离,又称Levenshtein距离(也叫做Edi ...

  4. 1.交通聚类:编辑距离 (Levenshtein距离)Java实现

    1.最近工作中要实现用户车辆的行驶路线的聚类,由于所给的数据只有用户一天中交通卡口所监视的卡口名称 :即青岛路-威海路-济阳路 . 要通过聚类实现车辆路线的规律分析,首先要解决的是相似度问题,我们知道 ...

  5. Levenshtein距离

    Levenshtein Distance,又称Edit Distance,在自然语言处理中有着广泛的应用.Levenshtein  Distance 指的是两个字符串之间,由一个转换成另一个所需的最少 ...

  6. Finding Similar Items 文本相似度计算的算法——机器学习、词向量空间cosine、NLTK、diff、Levenshtein距离

    http://infolab.stanford.edu/~ullman/mmds/ch3.pdf 汇总于此 还有这本书 http://www-nlp.stanford.edu/IR-book/ 里面有 ...

  7. 【Algorithm】字符串编辑距离(Levenshtein距离)C++算法实现

    算法实现比较简单,但算法原理不明白,有空了再研究一下. unsigned LevenshteinDistance(const string& s1, const string& s2) ...

  8. Levenshtein Distance莱文斯坦距离算法来计算字符串的相似度

    Levenshtein Distance莱文斯坦距离定义: 数学上,两个字符串a.b之间的莱文斯坦距离表示为levab(|a|, |b|). levab(i, j) = max(i, j)  如果mi ...

  9. Levenshtein计算相似度距离

    使用Levenshtein计算相似度距离,装下模块,调用下函数就好. 拿idf还得自己去算权重,而且不一定准确度高,一般做idf还得做词性归一化,把动词形容词什么全部转成名词,很麻烦. Levensh ...

随机推荐

  1. 37.如何把握好 transition 和 animation 的时序,创作描边按钮特效

    原文地址:https://segmentfault.com/a/1190000015089396 拓展地址:https://scrimba.com/c/cWqNNnC2 HTML code: < ...

  2. journalctl

    systemd 提供了自己的日志系统(logging system),称为 journal.使用 systemd 日志,无需额外安装日志服务(syslog).读取日志的命令: # journalctl ...

  3. django之urlresolver

    >>> from django.utils.regex_helper import normalize >>> bits=normalize(r'^static/( ...

  4. C#串口通讯,16进制与字符串、字节数组之间的转换。

    1.将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制Console.WriteLine("十进制166的二进制表示: "+Convert.ToString(166, ...

  5. CustomJSProperties珍藏版。目的是减少客户端的代码数量,但是又能将服务器数据传输给客户端。关键是:数据是实时更新的!!!!

    [这是帮助文档的说明] CustomJSProperties EventThe CustomJSProperties event fires each time a control callback ...

  6. SecureCRT显示乱码的解决办法

    下面来看看SecureCRT的显示出现乱码这种情况.比如: 现在我们重新设置一下 设置下图中的配置 1.选择字符编码为UTF-8. 2.设置字符集为GB2312后保存好后确认退出. 3.再次测试一下.

  7. Redis list 数据类型

    lpush()先进后出  //从头部加入元素   //栈      lrange 元素集合   0    -1 lpop  从list头部删除元素,并返回删除元素 rpush()先进先出 //从尾部加 ...

  8. Lua的特点

    特点: Lua是一个脚本语言.是目前速度最快的脚本语言.它能与C/C++代码互相调用. Lua脚本是跨平台的,是要使用Lua基本语法和标准库写的脚本,都是可以跨平台的(用了扩展库则不一定). Lua源 ...

  9. word中怎样设置页码包含总页数

    一个同事做毕业论文,论文是Word格式,1-2页是封面和目录,不需要页码,第3-10页是论文内容,需要从第1页开始显示,并显示论文内容的总页数8 页.具体为页脚处显示“第*页共*页”.他让我帮忙设置一 ...

  10. OneinStack PHP多版本共存教程

    1. 安装OneinStack 选择lnmp模式,默认安装php5.4,安装步骤参考:http://oneinstack.com/install/ 选项如下: Install Nginx Do not ...