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
  • asp之家 软件编程 m.aspxhome.com