五大匹配算法

五大匹配算法

五大匹配算法 BF 匹配、RK 匹配、KMP 匹配、BM 匹配、Sunday 匹配。


match-algorithm

1、BF 匹配

// BF 匹配(暴力匹配)
public static int bfMatch(String text, String pattern) {char[] t = text.toCharArray();char[] p = pattern.toCharArray();int i = 0, j = 0;while (i < t.length && j < p.length) {if (t[i] == p[j]) {i++;j++;} else {i = i - j + 1;j = 0;}}if (j == p.length) {return i - j;} else {return -1;}
}

2、RK 匹配

// RK 匹配(哈希匹配)
public static int rkMatch(String text, String pattern) {char[] t = text.toCharArray();char[] p = pattern.toCharArray();int pHash = hash(p, 0, p.length);for (int i = 0; i < t.length - p.length + 1; i++) {int tHash = hash(t, i, p.length);if (tHash == pHash) {int j, k;for (j = i, k = 0; k < p.length; ) {if (t[j] == p[k]) {j++;k++;} else {break;}}if (k == p.length) {return i;}}}return -1;
}public static int hash(char[] chars, int startIndex, int length) {int r = 26;int k = 1225;int hash = 0;for (int i = startIndex; i < startIndex + length; i++) {hash = r * hash + chars[i] % k;}return hash;
}

3、KMP 匹配

// KMP 匹配
public static int kmpMatch(String text, String pattern) {char[] t = text.toCharArray();char[] p = pattern.toCharArray();int[] next = next(p);int i = 0, j = 0;while (i < t.length && j < p.length) {if (j == -1 || t[i] == p[j]) {i++;j++;} else {j = next[j];}}if (j == p.length) {return i - j;} else {return -1;}
}public static int[] next(char[] p) {int[] next = new int[p.length];int k = -1, j = 0;next[j] = -1;while (j < p.length - 1) {if (k == -1 || p[k] == p[j]) {k++;j++;if (p[k] == p[j]) {next[j] = next[k];} else {next[j] = k;}} else {k = next[k];}}return next;
}

4、BM 匹配

// BM 匹配
public static int bmMatch(String text, String pattern) {char[] t = text.toCharArray();char[] p = pattern.toCharArray();int[] ascii = ascii(p);for (int i = 0, j; i < t.length - p.length + 1; ) {for (j = p.length - 1; t[i + j] == p[j]; j--) {if (j == 0) {return i;}}i += Math.max(1, j - ascii[t[i + j]]);}return -1;
}public static int[] ascii(char[] p) {int[] ascii = new int[256];for (int i = 0; i < p.length; i++) {ascii[p[i]] = i;}return ascii;
}

5、Sunday 匹配

// Sunday 匹配
404

@XGLLHZ - 陈慧娴 -《跳舞街》.mp3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/154980.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vs code git问题:文件明明已加入忽略文件中,还是出现

vs code git问题&#xff1a;文件明明已加入忽略文件中&#xff0c;还是出现 原因&#xff1a; 因为之前这些文件都已经提交过&#xff0c;线上GIT已经存在&#xff0c;已存在就不能忽略&#xff0c; 解决办法&#xff1a; 先要删除这些文件提交上去&#xff0c;然后把这些文…

使用USB转JTAG芯片CH347在Vivado下调试

简介 高速USB转接芯片CH347是一款集成480Mbps高速USB接口、JTAG接口、SPI接口、I2C接口、异步UART串口、GPIO接口等多种硬件接口的转换芯片。 通过XVC协议&#xff0c;将CH347应用于Vivado下&#xff0c;简单尝试可以成功&#xff0c;源码如下&#xff0c;希望可以一起共建&a…

软件系统运维方案

1.项目情况 2.服务简述 2.1服务内容 2.2服务方式 2.3服务要求 2.4服务流程 2.5工作流程 2.6业务关系 2.7培训 3.资源提供 3.1项目组成员 3.2服务保障 点击获取所有软件开发资料&#xff1a;点我获取

一文了解Spring依赖注入时循环依赖问题

目录 什么是循环依赖 凡是Java的循环依赖都会有问题&#xff1f; 为什么Spring循环依赖会有问题&#xff1f; Spring解决循环依赖问题的思路&#xff1f; 设置二级缓存对象池 方案一直接将实例化对象放入早期对象池 方案一缺点 方案二-将实例化对象处理AOP后放入早期对象…

3.生成验证码 + 开发登录、退出功能 + 显示登录信息

目录 1.生成验证码 2.开发登录、退出功能 2.1 开发数据访问层 2.2 开发业务层:实现登录功能

入行IC | 从小白助理级,到总监专家级,到底要经历怎样的成长阶段呢?

《中国集成电路产业人才发展报告》是业内和IC设计、IC人才都息息相关的一份报告。 &#xff08;文末可领全部报告资料&#xff09; * 从报告数据来看&#xff0c;无论在半导体产业的哪个环节&#xff0c;个人发展路径和年薪待遇都是逐级攀升的趋势。 那么从小白助理级&a…

深度学习中的图像处理(基本介绍+示例代码)

一、基本介绍 深度学习中的图像处理是指使用深度学习技术处理图像数据的过程。深度学习在图像处理领域取得了显著的成功&#xff0c;尤其是卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;CNN&#xff09;的出现和发展&#xff0c;使得计算机能够学习和理…

latex英文模板中,输入中文出现空白 解决办法

在导言区加入以下代码即可 \usepackage[UTF8]{ctex}

口袋参谋:找关键词的三种方法!

​如何找热搜关键词&#xff1f;99%的商家都不知道。那么今天可以根据我说的三种方法去做。 第一种方法&#xff1a;利用竞争对手 通过分析竞争对手&#xff0c;正在使用和采取何种优化方法&#xff0c;来帮助你理解市场上正在流行什么样的关键字&#xff0c;这些热词可以直接从…

Java自动化驱动浏览器搜索稻香

下载最新的Chrome浏览器 查看chrome版本&#xff0c;在浏览器地址栏输入&#xff1a;chrome://version/ 下载对应的浏览器驱动&#xff0c;将其放到一个目录中&#xff0c;我放到了D:/chromedriver-win64 导入对应的依赖【注意&#xff1a;不要导入最新的版本&#xff0c;最…

JSP不等于JavaScript

一、什么是jsp&#xff1f; jsp是Servlet设计&#xff0c;中文含义是java服务器页面&#xff0c;java都是在服务器上进行的&#xff0c;一般情况下&#xff0c;返回的值是一个html&#xff0c;所以要依靠浏览器才能预览。 二、什么是JavaScript? JavaScript是一种脚本语言&…

数字化转型导师坚鹏:数字化时代银行网点厅堂营销5大重点分析

数字化时代银行网点厅堂营销存在以下5大重点&#xff1a; 1、厅堂宣传。应以主推产品作为厅堂宣传的宣传重点&#xff0c;结合视频宣传、平面物料、互动机具、陈列物料等多维度&#xff0c;开展有序重复展示&#xff0c;进而加大吸引客户关注度。 2、产品推荐。在识别出中高端…

开发基于 ChatGPT 分析热点事件并生成文章的网站应用【热点问天】把百度等热点用chatGPT来对热点事件分析海量发文章 开发步骤 多种方式获取利润

这样做的优点&#xff1a; 1.不用每个人都问chatGPT同样的问题。 2.已经生成的&#xff0c;反应快速。 3.内容分析的客观&#xff0c;真实&#xff0c;基于数据&#xff0c;无法造假。 4.无其它目的这种基于 ChatGPT 分析热点事件并生成文章的网站&#xff0c;可以通过多种方式…

纽扣电池/含纽扣电池产品上架亚马逊各国法规标准要求16 CFR 第 1700.15/20 ANSI C18.3M(瑞西法案认证)

亚马逊纽扣电池认证标准有哪些&#xff1f; 一、美国站&#xff08;亚马逊纽扣电池/含纽扣电池商品&#xff09;安全测试标准要求&#xff1a; 16 CFR 第 1700.15 、16 CFR 第 1700.20 ANSI C18.3M、警示标签声明要求&#xff08;第 117-171 号公众法&#xff09; 二、澳大…

Linux应用开发基础知识——网络通信编程(九)

前言&#xff1a; 通过学习为后续Linux网络编程奠定基础。首先介绍网络编程的概念&#xff0c;即网络协议分层&#xff0c;旨在帮助读者对网络建立初步的、全面立体的认识&#xff0c;其次介绍包括协议、端口、地址等&#xff1b;最后介绍应用非常广泛的传输控制协议&#xff0…

CentOS8部署Skywalking(非容器方式)

一、官网下载安装包 二、安装 #tar -zxf apache-skywalking-apm-9.6.0.tar.gz #mv apache-skywalking-apm-9.6.0 skywalking #cd /opt/skywalking 修改配置文件 #vi /opt/skywalking/config/application.yml #vi vi /opt/skywalking/webapp/application.yml 三、运行 ./bin…

NLP | SimKGC论文详解及项目实现

本文主要讲解了论文SimKGC&#xff1a;基于预训练语言模型的简单对比知识图谱补全的论文总结以及项目实现。 论文题目&#xff1a;2022_SimKGC: Simple Contrastive Knowledge Graph Completion with Pre-trained Language Models 论文地址&#xff1a;2022.acl-long.295.pdf (…

竞赛 题目:基于深度学习的图像风格迁移 - [ 卷积神经网络 机器视觉 ]

文章目录 0 简介1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习卷积神经网络的花卉识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c…

二进制安装minio 并实现主从同步

二进制安装minio 并实现主从同步 一、安装部署minio1.1、创建minio目录并下载minio1.2、授予执行权限1.3、创建存储目录和日志目录1.4、在目录下创建一个启动脚本1.5、设置minio开机启动 二、minio主从配置2.1、从服务器安装过程同《一》2.2、从服务器下载mc2.3、配置同步2.4、…

yoloV8训练自己的数据集合资源

yoloV8训练自己的数据集合资源 其中指令yolo直接用&#xff0c;它不是文件夹 资源链接&#xff1a; 【YOLO】YOLOv8训练自定义数据集&#xff08;4种方式&#xff09; 超详细yolov8训练数据集流程