当前位置: 首页 > news >正文

JAVA开发 基于最长公共子序列来计算两个字符串之间的重复率

计算两个字符串之间的重复率

    • 最长公共子序列
    • 实现代码

最长公共子序列

基于最长公共子序列(Longest Common Subsequence, LCS)的重复率的中心逻辑是首先找到两个或多个序列中同时出现的、不一定连续但保持相对顺序的最长子序列,然后计算这个最长公共子序列的长度与两个或多个序列中较长字符串长度的比值,通常以百分比的形式表示。

重复率 = (LCS的长度 / 较长字符串的长度) * 100%

这种基于最长公共子序列的重复率计算方法常用于衡量两个字符串的相似性或重复程度,特别是在文本比较、DNA序列分析、版本控制等领域。然而,需要注意的是,这种方法只能捕捉到字符串中的顺序相似性,而不能捕捉到非顺序的相似性(如字符频率或编辑距离)。

实现代码

import java.util.HashSet;
import java.util.Set;
import java.util.HashMap;
import java.util.Map;public class Main {// 使用动态规划计算最长公共子序列的长度public static int longestCommonSubsequenceLength(String strA, String strB) {int m = strA.length();int n = strB.length();int[][] dp = new int[m + 1][n + 1];for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {if (strA.charAt(i - 1) == strB.charAt(j - 1)) {dp[i][j] = dp[i - 1][j - 1] + 1;} else {dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);}}}return dp[m][n];}// 计算重复率public static double calculateDuplicationRateBasedOnLCS(String strA, String strB) {int lcsLength = longestCommonSubsequenceLength(strA, strB);int shorterLength = Math.min(strA.length(), strB.length());return (double) lcsLength / shorterLength * 100;}public static void main(String[] args) {String strA = "这两天,河北廊坊市人民医院退还核酸检测费的消息引发热议。奔流新闻记者从廊坊市人民医院财务科证实,“从5月20日开始对收到短信的市民退费,多数成年人已经完成退费,今天开始对青少年儿童退费。”";String strB = "5月20日,一些市民收到廊坊市人民医院发来的短信:按上级要求退还2020年至2021年核酸检测费。请持身份证于5月20日-6月20日工作日时间到市医院财务部退费。";double rate = calculateDuplicationRateBasedOnLCS(strA, strB);System.out.println("基于最长公共子序列的重复率: " + rate + "%");}}

执行结果
在这里插入图片描述

相关文章:

  • 删除链表的倒数第N个节点-力扣
  • GitLab的原理及应用详解(三)
  • 深入解析kube-scheduler的算法自定义插件
  • 软件系统安全设计规范(word原件)
  • 使用Golang开发一个HTTP客户端请求命令行工具
  • Spring 中常用的手动装载 bean 方法
  • 代码随想录训练营Day 38|力扣435. 无重叠区间、763.划分字母区间、56. 合并区间
  • docker实战之搭建MYSQL8.0主从同步
  • C++11function包装器的使用
  • 如何使用Java发送SOAP请求与webservice 服务进行通信
  • 如何搭建springBoot项目中的全局异常处理和自定义异常处理
  • golang通过go-aci适配神通数据库
  • 【全网最全】2024电工杯数学建模B题问题一14页论文+19建模过程代码+py代码+2种保奖思路+数据等(后续会更新成品论文等)
  • CCF-CSP认证 2024年3月 4.化学方程式配平
  • SpringBootWeb 篇-深入了解 Mybatis 概念、数据库连接池、环境配置和 Lombok 工具包
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • Babel配置的不完全指南
  • C++入门教程(10):for 语句
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • JavaScript实现分页效果
  • js操作时间(持续更新)
  • Linux gpio口使用方法
  • Nacos系列:Nacos的Java SDK使用
  • Travix是如何部署应用程序到Kubernetes上的
  • vue-cli在webpack的配置文件探究
  • 基于Android乐音识别(2)
  • 记一次用 NodeJs 实现模拟登录的思路
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 积累各种好的链接
  • ​插件化DPI在商用WIFI中的价值
  • #07【面试问题整理】嵌入式软件工程师
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (pojstep1.1.2)2654(直叙式模拟)
  • (二)hibernate配置管理
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (四)React组件、useState、组件样式
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)setTimeout 和 setInterval 的区别
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .NET构架之我见
  • .NET开发者必备的11款免费工具
  • ?.的用法
  • @PostConstruct 注解的方法用于资源的初始化
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例
  • [C++]priority_queue的介绍及模拟实现
  • [iOS]iOS获取设备信息经常用法