相似度匹配算法实际是计算字符串之间的编辑距离。

经常刷算法的同学,就应该知道这个是一个可迭代可递归实现的中难度的leetcode算法。

详细思路可以在【思路分析指引】看看,我就直接给出对应的的代码!

二维dp算法

/*** 相似du匹配算法,约靠近返回的值越高* @param target* @param findOb* @return*/public static double matchStr(String target ,Object findOb ) {//lengthString find = String.valueOf(findOb);int Length1 = target.length();int Length2 = find.length();int distance = 0;if (Length1 == 0) {distance = Length2;}if (Length2 == 0) {distance = Length1;}if (Length1 != 0 && Length2 != 0) {int[][] dp = new int[Length1 + 1][Length2 + 1];//编号int initValue = 0;for (int i = 0; i <= Length1; i++) {dp[i][0] = initValue;initValue++;}initValue = 0;for (int i = 0; i <= Length2; i++) {dp[0][i] = initValue;initValue++;}char[] targetArr = target.toCharArray();char[] findArr = find.toCharArray();for (int i = 1; i <= Length1; i++) {for (int j = 1; j <= Length2; j++) {if (targetArr[i - 1] == findArr[j - 1]) {distance = 0;} else {distance = 1;}dp[i][j] = Math.min(dp[i - 1][j] + 1,  //  删除dp[i][j - 1] + 1,       // 插入dp[i - 1][j - 1] + 1     // 替换)}}distance = dp[Length1][Length2];}double v = 1 - 1.0 * distance / (Length1 > Length2 ? Length1 : Length2);return v;}

以下文字推导 借用“labuladong”的《算法小抄》
上面的代码还可以进行状态压缩优化,我们还需要一个额外的变量 pre 来时刻保存 (i-1,j-1) 的值。推导公式就可以从二维的:

dp[i][j] = min(dp[i-1][j] , dp[i-1][j-1] , dp[i][j-1]) + 1

转化为一维的:

dp[i] = min(dp[i-1], pre, dp[i]) + 1

一维dp算法

public static int matchStr(String target ,Object findOb ) {//lengthDouble v = 0d;String find = String.valueOf(findOb).toLowerCase();int targetLength = target.length();int findLength = find.length();int distance = 0;if (targetLength != 0 && findLength != 0) {target=target.toLowerCase();if(find.contains(target)){v = Double.valueOf(1000-findLength+targetLength);}else{int max = Math.max(targetLength, findLength);int[] dp = new int[max+1];//编号for (int i = 0; i <= max; i++) {dp[i] = i;}char[] targetArr = target.toCharArray();char[] findArr = find.toCharArray();for (int i = 1; i <= targetLength; i++) {int temp = dp[0];for (int j = 1; j <= findLength; j++) {int pre = temp;temp = dp[j];if (targetArr[i - 1] == findArr[j - 1]) {dp[j] = pre;} else {dp[j] = Math.min(Math.min(dp[j - 1], pre), dp[j]) + 1;}}}distance = dp[findLength];v = (1 - 1.0 * distance / (targetLength > findLength ? targetLength : findLength)) * 1000;}}return v.intValue();}

java 相似度匹配算法相关推荐

  1. 图像处理之积分图应用三(基于NCC快速相似度匹配算法)

    from:https://blog.csdn.net/jia20003/article/details/53021614 图像处理之积分图应用三(基于NCC快速相似度匹配算法) 基于Normalize ...

  2. java 华氏度_在Java中将华氏度转换为摄氏温度[重复] - java

    This question already has answers here: Double value returns 0 [duplicate] (3个答案) 6年前关闭. 我正在尝试将华氏度转换 ...

  3. java正向最大匹配算法_java中文分词之正向最大匹配法实例代码

    前言 基于词典的正向最大匹配算法(最长词优先匹配),算法会根据词典文件自动调整最大长度,分词的好坏完全取决于词典. 所谓词典正向最大匹配就是将一段字符串进行分隔,其中分隔 的长度有限制,然后将分隔的子 ...

  4. java opencv 模板匹配算法_OpenCV探索之路(九):模板匹配

    模板匹配的作用在图像识别领域作用可大了.那什么是模板匹配? 模板匹配,就是在一幅图像中寻找另一幅模板图像最匹配(也就是最相似)的部分的技术. 说的有点抽象,下面给个例子说明就很明白了. 在上面这幅全明 ...

  5. 名称相似度匹配算法(文本相似度匹配)

    在处理数据时,有时需要找出数据中存在错误的数据或者对数据进行去重.对数据去重,如果存储在数据库中,我想一个sql就可以搞定,可是要找出数据中错误的数据,就比较困难,一般只能人工判断.举例:比如有一批账 ...

  6. java 相似度_java 实现相似度算法

    通过JAVA编程,使用余弦定理,相似度算法的实现 /** * 计算带有权重的相似度 * @param dict1:Map:Map * @param dict2:Map:Map * @return */ ...

  7. java 相似度计算

    相似度计算的java代码: // 相似度计算public double xiangsidu(String a, String b) {// 相似度公式:1 - 最小编辑距离/两个串中较长的长度int ...

  8. 图片对比相似度算法标准,图片相似度匹配算法

    怎么对比两张图片的相似度 1.首先打开微信,选择底部"发现".如图所示.2.然后在点击进入"小程序".如图所示.3.然后输入"腾讯AI体验中心&quo ...

  9. java访问控制度_菜鸡的Java笔记 - java 访问控制权限

    java中四种访问控制权限的使用 内容 在java里面一共定义有四个权限,按照由小到大的顺序:private 那么这四种访问控制权限的特点如下 NO 范围 private defaule protec ...

最新文章

  1. 20155328 《信息安全系统设计基础》 课程总结
  2. 再见乱码:5分钟读懂MySQL字符集设置
  3. 第一章 用户及组的管理
  4. c++对象模型-虚拟析构函数
  5. Linux常用编辑器使用:vi、vim、nano、gedit
  6. 获取map第一个的key和value_谁要是再敢用Map传参,我过去就是一JIO
  7. 链接分析算法系列-机器学习排序
  8. 尺度不变性是指什么不变_不变性如何提供帮助
  9. javascript学习系列(21):数组中的reduceRight法
  10. 完成简单的四则运算(包含小括号)(栈)
  11. 安卓手机重启日志_安卓手机这些超级好用的技巧你知道几个?
  12. 孙鑫VC学习笔记:第十三讲 (六) 关于释放内存
  13. Ubuntu如何查看端口已经开放
  14. [翻译]XNA 3.0 Game Programming Recipes之six
  15. ping-pong机制
  16. Activiti工作流的流转任务和结束任务
  17. DS18B20数字温度计使用(转)
  18. 商务谈判中有哪些谈判技巧?
  19. 无人驾驶公司实力排名---自动驾驶初创企业排名(roadstar.ai、pony.ai、momenta、景驰和驭势科技等)
  20. QSettings遇到神坑

热门文章

  1. 【网络工程】9、实操-万达酒店综合项目(三)
  2. Visual Studio点击之前创建的Form提示“由于从未加载设计器的文档,因此无法显示设计器”
  3. uiautomator2安卓测试框架报No tests found for given includes
  4. 管理者运动初衷不是竞技,只为健康吗?
  5. 微生物组基因分析流程shotgene安装与nextflow初探
  6. html a标签属性 rel='nofollow'
  7. 一只计算机专业学生的【大一年度总结】
  8. 【校招VIP】出品:产品在线实习“职查查”大V信息认证实战
  9. POJ 2375 Cow Ski Area 增加最小边使图强连通
  10. 达芬奇发明计算机读后感200,三年级读后感:读《达芬奇》有感200字