五大匹配算法

五大匹配算法

五大匹配算法 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.hqwc.cn/news/205561.html

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

相关文章

CCF CSP认证 历年题目自练Day48

题目 试题编号&#xff1a; 201803-3 试题名称&#xff1a; URL映射 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 256.0MB 问题描述&#xff1a; 问题描述   URL 映射是诸如 Django、Ruby on Rails 等网页框架 (web frameworks) 的一个重要组件。对于从浏览器发来的 H…

渗透测试高级技巧(二):对抗前端动态密钥与非对称加密防护

在前文的技术分享中&#xff0c;我们描述了验签和静态对称加密&#xff08;静态密钥 AES&#xff09;的常见场景&#xff0c;大家我相信遇到类似的加解密清醒&#xff0c;基本都可以通过热加载的基本使用获得破解前端加密解密的方法&#xff0c;达到一个比较好的测试状态。 在…

定时器的使用

目录 前言 正文 1.方法 schedule(TimerTask task, Date time) 的测试 &#xff08;1&#xff09;执行任务的时间晚于当前时间(在未来执行)的效果 &#xff08;2&#xff09;线程TimerThread不销毁的原因 &#xff08;3&#xff09;使用 public void cancel() 方法实现 T…

阿里云高效计划学生和老师免费代金券申请认证方法

阿里云高校计划学生和教师均可参与&#xff0c;完成学生认证和教师验证后学生可以免费领取300元无门槛代金券和3折优惠折扣&#xff0c;适用于云服务器等全量公共云产品&#xff0c;订单原价金额封顶5000元/年&#xff0c;阿里云百科aliyunbaike.com分享阿里云高校计划入口及学…

不是说人工智能是风口吗,那为什么工作还那么难找?

最近确实有很多媒体、机构渲染人工智能可以拿高薪&#xff0c;这在行业内也是事实&#xff0c;但前提是你有足够的竞争力&#xff0c;真的懂人工智能。 首先&#xff0c;人工智能岗位技能要求高&#xff0c;人工智能是一个涵盖了多个学科领域的综合性学科&#xff0c;包括数学、…

LiteOS同步实验(实现生产者-消费者问题)

效果如下图&#xff1a; 给大家解释一下上述效果&#xff1a;在左侧&#xff08;顶格&#xff09;的是生产者&#xff08;Producer&#xff09;&#xff1b;在右侧&#xff08;空格&#xff09;的是消费者&#xff08;Consumer&#xff09;。生产者有1个&#xff0c;代号为“0”…

Scala如何写一个通用的游戏数据爬虫程序

以前想要获取一些网站数据的时候&#xff0c;都是通过人工手动复制粘贴&#xff0c;这样的效率及其低下。数据少无所谓&#xff0c;如果需要采集大量数据&#xff0c;手动就显得乏力了。半夜睡不着&#xff0c;爬起来写一段有关游戏商品数据的爬虫通用模板&#xff0c;希望能帮…

Git——感谢尚硅谷官方文档

Git——尚硅谷学习笔记 第1章 Git 概述1.1 何为版本控制1.2 为什么需要版本控制1.3 版本控制工具1.4 Git 简史1.5 Git 工作机制1.6 Git 和代码托管中心 第2章 Git 安装第 3 章 Git 常用命令3.1 设置用户签名3.2 初始化本地库3.3 查看本地库状态3.4 添加暂存区3.4.1 将工作区的文…

JavaDS —— 初识集合框架 + 时间/空间复杂度

目录 1. 初识集合框架 1.1 集合框架的初识 1.2 什么是数据结构&#xff1f; 2. 时间与空间复杂度 2.1 时间复杂度 2.2 大O的渐进表示法 2.3 常见时间复杂度计算举例 2.4 空间复杂度 1. 初识集合框架 1.1 集合框架的初识 什么叫集合&#xff1f;什么叫框架&#xff1f;什么又叫集…

React函数组件渲染两次

渲染两次是因为react默认开启了严格模式 React.StrictMode标签作用&#xff1a; 1、识别不安全的生命周期 2、关于使用过时字符串 ref API 的警告 3、关于使用废弃的 findDOMNode 方法的警告 4、检测意外的副作用 5、检测过时的 context API 注释掉React.StrictMode即为关闭严…

Vue3实现粒子动态背景

官网&#xff1a; https://particles.js.org/ npm&#xff1a; https://www.npmjs.com/package/particles.vue3 安装 pnpm add particles.vue3 pnpm add tsparticles-slim 注册 main.js import { createApp } from vue import type { App } from vue import globleApp f…

Spark---转换算子、行动算子、持久化算子

一、转换算子和行动算子 1、Transformations转换算子 1&#xff09;、概念 Transformations类算子是一类算子&#xff08;函数&#xff09;叫做转换算子&#xff0c;如map、flatMap、reduceByKey等。Transformations算子是延迟执行&#xff0c;也叫懒加载执行。 2)、Transf…