java字符串相似度算法
作者:Benjamin_whx 时间:2023-11-26 12:33:25
本文实例讲述了java字符串相似度算法。分享给大家供大家参考。具体实现方法如下:
public class Levenshtein {
private int compare(String str, String target) {
int d[][]; // 矩阵
int n = str.length();
int m = target.length();
int i; // 遍历str的
int j; // 遍历target的
char ch1; // str的
char ch2; // target的
int temp; // 记录相同字符,在某个矩阵位置值的增量,不是0就是1
if (n == 0) {
return m;
}
if (m == 0) {
return n;
}
d = new int[n + 1][m + 1];
for (i = 0; i <= n; i++) { // 初始化第一列
d[i][0] = i;
}
for (j = 0; j <= m; j++) { // 初始化第一行
d[0][j] = j;
}
for (i = 1; i <= n; i++) { // 遍历str
ch1 = str.charAt(i - 1);
// 去匹配target
for (j = 1; j <= m; j++) {
ch2 = target.charAt(j - 1);
if (ch1 == ch2) {
temp = 0;
} else {
temp = 1;
}
// 左边+1,上边+1, 左上角+temp取最小
d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + temp);
}
}
return d[n][m];
}
private int min(int one, int two, int three) {
return (one = one < two ? one : two) < three ? one : three;
}
/**
* 获取两字符串的相似度
*
* @param str
* @param target
*
* @return
*/
public float getSimilarityRatio(String str, String target) {
return 1 - (float) compare(str, target) / Math.max(str.length(), target.length());
}
public static void main(String[] args) {
Levenshtein lt = new Levenshtein();
String str = "ab";
String target = "ac";
System.out.println("similarityRatio=" + lt.getSimilarityRatio(str, target));
}
}
希望本文所述对大家的Java程序设计有所帮助。
标签:java,算法
0
投稿
猜你喜欢
Mybatis RowBounds 限制查询条数的实现代码
2022-11-18 17:26:03
Java日常练习题,每天进步一点点(2)
2023-08-17 22:46:19
Java并发之线程池Executor框架的深入理解
2022-03-13 10:20:55
浅谈Spring Boot 开发REST接口最佳实践
2021-10-08 12:24:35
Android中FoldingLayout折叠布局的用法及实战全攻略
2021-05-23 19:29:17
Android控件View打造完美的自定义侧滑菜单
2021-06-16 07:44:00
使用java基础类实现zip压缩和zip解压工具类分享
2021-11-23 08:03:41
Spring Boot 与DBunit 配合使用方法
2022-07-29 13:29:28
Java获取文件的路径及常见问题解决方案
2023-04-16 04:24:15
Java自定义实现链队列详解
2023-06-22 12:47:31
C#生成验证码图片的方法
2023-07-18 19:39:15
C#实现跑马灯效果的示例代码
2022-06-10 07:12:40
详谈Java中的事件监听机制
2022-08-05 00:29:30
c# 关闭窗体时提示的小例子
2021-11-10 19:08:18
Java实现查找算法的示例代码(二分查找、插值查找、斐波那契查找)
2022-05-28 04:17:38
JAVAEE项目结构以及并发随想
2023-02-22 15:38:52
C#字符串内存分配与驻留池学习分享
2022-07-02 12:11:29
Flutter控制组件显示和隐藏三种方式详解
2023-07-07 03:03:30
Java-JFrame窗体美化方式
2022-08-17 10:07:38
Android应用中图片浏览时实现自动切换功能的方法详解
2023-04-13 15:34:00