当前位置: 首页 > 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 + "%");}}

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

http://www.lryc.cn/news/352005.html

相关文章:

  • Android HAL到Framework
  • Python数据可视化(七)
  • StringMVC
  • 前端基础入门三大核心之HTML篇 —— SVG的viewBox、width和height:绘制矢量图的魔法比例尺【含代码示例】
  • Java-Zookeeper
  • Godot游戏引擎有哪些优势
  • 一张图看懂大模型性价比:能力、价格、并发量全面PK
  • 设计井字棋游戏(一)
  • 华为手机卡顿(仅针对于部分人来说,我也不清楚是否真的有用)
  • 7、按钮无法点击
  • 开源博客项目Blog .NET Core源码学习(25:App.Hosting项目结构分析-13)
  • 第七节 ConfigurationClassParser 源码分析
  • 零基础代码随想录【Day42】|| 1049. 最后一块石头的重量 II,494. 目标和,474.一和零
  • 2024-5-24 石群电路-15
  • 功能测试:核心原理、挑战以及解决之道
  • 跨境电商赛道,云手机到底能不能化繁为简?
  • linux:信号深入理解
  • Android系统的/etc/mkshrc文件
  • LeetCode199二叉树的右视图
  • JavaScript 基础
  • DOS学习-目录与文件应用操作经典案例-type
  • QT教程-一,初识QT
  • SpringBoot搭建Eureka注册中心
  • day 38 435.无重叠区间 763.划分字母区间 56. 合并区间 738.单调递增的数字 968.监控二叉树
  • ssm/springoot养老院问诊服务预约系统_96316老年人服务系统
  • WordPress插件优化对提升性能有多大影响?
  • Servlet的response对象
  • Unity射击游戏开发教程:(20)增加护盾强度
  • 初识C语言——第二十八天
  • Android NDK系列(三)输入事件分发到Native层的流程