解题(LevenshteinInstance--Levenshtein距离)
题目描述
Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance。
Ex:
字符串A:abcdefg
字符串B: abcdef
通过增加或是删掉字符”g”的方式达到目的。这两种方案都需要一次操作。把这个操作所需要的次数定义为两个字符串的距离。
要求:
给定任意两个字符串,写出一个算法计算它们的编辑距离。
请实现如下接口
/* 功能:计算两个字符串的距离
* 输入: 字符串A和字符串B
* 输出:无
* 返回:如果成功计算出字符串的距离,否则返回-1
*/
public static int calStringDistance (String charA, String charB)
{
return 0;
}
输入描述:
输入两个字符串
输出描述:
得到计算结果
输入
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距离)的更多相关文章
- 字符串编辑距离(Levenshtein距离)算法
基本介绍 Levenshtein距离是一种计算两个字符串间的差异程度的字符串度量(string metric).我们可以认为Levenshtein距离就是从一个字符串修改到另一个字符串时,其中编辑单个 ...
- Spark Java API 计算 Levenshtein 距离
Spark Java API 计算 Levenshtein 距离 在上一篇文章中,完成了Spark开发环境的搭建,最终的目标是对用户昵称信息做聚类分析,找出违规的昵称.聚类分析需要一个距离,用来衡量两 ...
- 51nod 1183 - 编辑距离 - [简单DP][编辑距离问题][Levenshtein距离问题]
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183 编辑距离,又称Levenshtein距离(也叫做Edi ...
- 1.交通聚类:编辑距离 (Levenshtein距离)Java实现
1.最近工作中要实现用户车辆的行驶路线的聚类,由于所给的数据只有用户一天中交通卡口所监视的卡口名称 :即青岛路-威海路-济阳路 . 要通过聚类实现车辆路线的规律分析,首先要解决的是相似度问题,我们知道 ...
- Levenshtein距离
Levenshtein Distance,又称Edit Distance,在自然语言处理中有着广泛的应用.Levenshtein Distance 指的是两个字符串之间,由一个转换成另一个所需的最少 ...
- Finding Similar Items 文本相似度计算的算法——机器学习、词向量空间cosine、NLTK、diff、Levenshtein距离
http://infolab.stanford.edu/~ullman/mmds/ch3.pdf 汇总于此 还有这本书 http://www-nlp.stanford.edu/IR-book/ 里面有 ...
- 【Algorithm】字符串编辑距离(Levenshtein距离)C++算法实现
算法实现比较简单,但算法原理不明白,有空了再研究一下. unsigned LevenshteinDistance(const string& s1, const string& s2) ...
- Levenshtein Distance莱文斯坦距离算法来计算字符串的相似度
Levenshtein Distance莱文斯坦距离定义: 数学上,两个字符串a.b之间的莱文斯坦距离表示为levab(|a|, |b|). levab(i, j) = max(i, j) 如果mi ...
- Levenshtein计算相似度距离
使用Levenshtein计算相似度距离,装下模块,调用下函数就好. 拿idf还得自己去算权重,而且不一定准确度高,一般做idf还得做词性归一化,把动词形容词什么全部转成名词,很麻烦. Levensh ...
随机推荐
- 500 OOPS: could not read chroot() list file:/etc/vsftpd/chroot_list
出错原因:用户没有变更根目录的权限. ftp用户默认的根目录是/home/ftp,如果要切换登陆目录,需要给予权限 解决方法: 第一步, 打开/etc/vsftpd/vsftpd.conf,做如下配置 ...
- linux获取线程ID
pthread_self()获取当选线程的ID.这个ID与pthread_create的第一个参数返回的相同.但是与ps命令看到的不同,因此只能用于程序内部,用于对线程进行操作. #include & ...
- C++中多态中构造函数与析构函数的调用
做个实验,看一下成员变量的构造析构,父类子类的构造析构,以及虚函数对调用的影响. #include <iostream> using namespace std; class Member ...
- 希尔&计数&基数排序
一.希尔排序 shell_sort def insert_sort_gap(li,gap): for i in range(gap,len(li)): tem = li[i] # 要插入的数 j = ...
- MethodInfo类的一般使用
1.MethodInfo类是在System.Reflection命名空间底下,既然是在Reflection空间底下.故名思议关于反射相关的操作,其中比较重要的方法是Invoke()方法,它 是加载相同 ...
- ubuntu 安装oracle客户端
from: http://webikon.com/cases/installing-oracle-sql-plus-client-on-ubuntu Installing Oracle SQL*Plu ...
- es6初级之解构----之一
1. 访问对象属性 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- Review CSS Selectors
Throughout this lesson, you learned how to select HTML elements with CSS and apply styles to them. L ...
- Mybatis高级应用-2
文章内容简介 1.回顾 2.Mybatis配置文件解析 3.Mybatis映射文件解析 ResultMap标签使用 自定义返回值处理(Map) 关联映射 主键映射 一.回顾 Mybatis是ORM(o ...
- bug提单规范
一.提单模板 标题:[项目组][模块][子模块][发生原因]问题简要描述描述:[预置条件] 有就写清楚,没有就写无[操作步骤]1.XXXXX2.XXXXXX3.XXXXX[实际结果] XXXXX[预期 ...