题目描述

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. fabric-network_setup.sh安装脚本分析

    在进行镜像安装前,提供了一个sample脚本的下载,可以使用该脚本进行容器的启停.这里对该脚本进行分析. fabric/release/linux-amd64/network_setup.sh 脚本提 ...

  2. 【数据分析方法论】指标_DAU/MAU

    背景 选择好的指标,就已经完成了一半的分析. 从入行数据分析开始定指标时的纠结,到现在已经可以相对比较熟悉这个路子了.从现在开始是一个积累好指标的阶段.而这里要谈的一个指标是:DAU/MAU. 资料收 ...

  3. uva-10905-贪心

    题意:对于输入的数字,拼接成一个最大的数字 解法:把数字当成字符串处理,排序,输出即可 import java.io.FileInputStream; import java.io.FileNotFo ...

  4. 使用git时报错出现vim.exe.stackdump

    使用git时报错出现vim.exe.stackdump 关闭命令行重新打开试试   一般由于异常报错引起的

  5. 1. 报错:1130-host ... is not allowed to connect to this MySql server 开放mysql远程连接 不使用localhost

    在服务器上打开mysql命令行,依次执行下面这两句: GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRA ...

  6. Appium -选择、操作元素2

    选择元素的方法 根据xpath 在Appium中,我们没法使用css,因为css是web专用的 Appium支持xpath来定位元素 对于一些比较复杂的元素的定位,我们可以用它 driver.find ...

  7. curator 实现分布式一致性锁

    最近准备在项目中引入分布式锁,故而研究基于zookeeper的curator框架. 网上资料不多,自己研究其源码发现,这个框架已经帮我做了很多现成的实现. 下面介绍下锁的实现: 通过源码中Lockin ...

  8. python流程控制while和if

    流程控制 1.流程控制if if的4种语法 语法1:   #结构形式 #if条件: # 代码1 # 代码2 # 代码3 # ... key_bak=123 key=int(input('key:')) ...

  9. 5.Python文件操作之增删改查

    需求一:取文件的前几行: f = open("yesterday","r",encoding="utf-8") for i in range ...

  10. python 函数返回值笔记

    今天学习python时候学习到闭包和柯里化 感觉看概念时候不好理解,自己写下大概就明白点了 柯里化如下 定义一个加法函数 def add(x, y): return x + y 这是没有柯里化之前的函 ...