五大匹配算法

news2024/9/23 7:23:58

五大匹配算法

五大匹配算法 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.coloradmin.cn/o/1237513.html

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

相关文章

麒麟v10系统,在虚拟机上直接连公司同一个局域网,设置静态ip

1.更改配置信息 cd /etc/sysconfig/network-scripts vi ifcfg-ens33 TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic DEFROUTEyes IPV4_FAILURE_FATALno IPV6INITyes IPV6_AUTOCONFyes IPV6_DEFROUTEyes IPV6_FAILURE_FATALno IPV6_ADDR_GEN_MODEstable-pri…

智慧储能边缘计算网关应用,提升能源效率

智慧储能通过边缘计算网关物联网技术来实现对储能电池等设备的在线监控和远程管理。边缘计算网关可以将储能数据转化为可用的信息&#xff0c;并传输到储能系统中&#xff0c;为储能管理提供优化与调度等数据支持。 边缘计算网关在智慧储能系统中起到了关键的作用。IR4000边缘计…

二叉树--递归和回溯

首先我们需要了解递归和回溯是什么意思 递归&#xff1a; 定义&#xff1a; 递归是一种在算法或函数中调用自身的过程。递归通常用于解决可以被拆分成相似子问题的问题。在递归算法中&#xff0c;每一次递归调用都是对较小子问题的求解&#xff0c;直到达到某个终止条件&#x…

数据库实验一 数据表的创建与修改管理

数据库实验一、数据表的创建与修改管理实验 一、实验目的二、设计性实验三、观察与思考 一、实验目的 (1) 掌握表的基础知识。 (2) 掌握使用SQL语句创建表的方法。 (3) 掌握表的修改、查看、删除等基本操作方法。 (4) 掌握表中完整性约束的定义。 (5) 掌握完整性约束的作用 二…

AIGC 点亮创作之旅,「重内容」行业也能轻装出发

毋庸置疑&#xff0c;AIGC 的普及成为了内容产业的一束光。 不仅策划们可以从信息挖掘、素材调用、修改编辑等基础文案工作中解放出来&#xff0c;美术也成为 AIGC 的应用强项&#xff0c;基本的加文字、换背景、改尺寸、延展素材等&#xff0c;都能快速解决。 内容创作者们也因…

基于SpringBoot的图书管理系统

基于SpringBoot的图书管理系统 图书管理系统开发技术功能模块代码结构数据库设计运行截图源码获取 图书管理系统 开发技术 技术&#xff1a;SpringBoot、MyBatis-Plus、MySQL、Beetl、Layui。 框架&#xff1a;基于开源框架Snowy-Layui开发。 工具&#xff1a;IDEA、Navicat等…

基于骑手优化算法优化概率神经网络PNN的分类预测 - 附代码

基于骑手优化算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于骑手优化算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于骑手优化优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

2023年中国制服需求量、市场规模及行业细分需求现状分析[图]

制服是某一种行业为体现自己的行业特点&#xff0c;并有别于其他行业而特别设计的着装。它具有很明显的功能体现与形象体现的双重含义。这种职业装不仅具有识别的象征意义&#xff0c;还规范了人的行为并使之趋于文明化、秩序化。 职业制服市场可细分为国家统一着装部门&#x…

数字逻辑电路基础-时序逻辑电路之锁存器

文章目录 一、锁存器简介二、verilog源码三、综合及仿真结果一、锁存器简介 本文介绍数字逻辑电路中一种常用的基础时序逻辑电路-锁存,顾名思义,它的功能就是将输入在控制信号有效时透明传输到输出端,当控制信号无效时,输出值保持不变。它具有记忆和存储功能。这是它区别组…

风丘电动汽车热管理方案 为您的汽车研发保驾护航

热管理技术作为汽车节能、提高经济性和保障安全性的重要措施&#xff0c;在汽车研发过程中具有重要作用。传统燃油汽车的热管理系统主要包括发动机、变速器散热系统和汽车空调&#xff0c;而电动汽车的热管理系统在燃油汽车热管理架构的基础之上&#xff0c;又增加了电机电控热…

VSCode配置用户代码段以及常用快捷键汇总

一&#xff1a;前言 VSCode 是一款由微软开发的轻量级编辑器&#xff0c;可以安装插件和兼容多种语言。其本身已经是目前前端开发所使用的主流软件。那么在开发过程中&#xff0c;我们经常要写很多重复性的代码&#xff0c;比如当你去新建一个 .vue 页面的时候&#xff0c;往往…

一款好用的window ssh远程终端term工具

这是一款可以在window10上运行的ssh终端工具. 官方下载地址&#xff1a; https://github.com/kingToolbox/WindTerm/releases 具体页面如下 下载解压后&#xff1a; 把它移动到C目录下面&#xff0c;并且搞一个桌面快捷方式&#xff0c;就可以了

vLive虚拟直播2.6.5.1版本全新上线,四大实用功能抢鲜看!

vLive虚拟直播系统https://live.vsochina.com/cnvLive虚拟直播系统2.6.5.1版本全新上线&#xff0c;新版本中新增了四大实用功能&#xff01;接下来小编将带你一同体验这些新功能。 1.支持带透明通道的信号源输入 新版本支持带透明通道的信号源输入&#xff0c;这意味着用户现…

垃圾收集器的种类及概述

1.JVM参数 1.1标准参数所有jdk版本通用参数 -version -help -server -cp 1.2-X参数 非标准参数&#xff0c;也就是在JDK各个版本中可能会变动 -Xint 解释执行 -Xcomp 第一次使用就编译成本地代码 -Xmixed 混合模式&#xff0c;JVM自己来决定 1.3 -XX参数 使用得最多…

visionOS空间计算实战开发教程Day 4 初识ImmersiveSpace

细心的读者会发现在在​​Day1​​​和​​Day2​​​的示例中我们使用的都是​​WindowGroup​​。 main struct visionOSDemoApp: App {var body: some Scene {WindowGroup {ContentView()}} } 本节我们来认识在visionOS开发中会经常用到的另一个概念​​ImmersiveSpace​​…

跑步耳机哪种好?运动耳机什么牌子好?无线运动耳机品牌排行

​运动健身已经成为当下最热门的运动健康项目&#xff0c;越来越多的人开始加入到这个行列中来。而在运动的过程中&#xff0c;佩戴一款适合自己的运动耳机听歌&#xff0c;不仅可以增加运动的乐趣&#xff0c;还能帮助我们更好地集中注意力&#xff0c;提高运动效果。然而&…

Talk | PSU助理教授吴清云:AutoGen-用多智能体对话开启下一代大型语言模型应用

本期为TechBeat人工智能社区第548期线上Talk&#xff01; 北京时间11月21日(周二)20:00&#xff0c;宾夕法尼亚州立大学助理教授—吴清云的Talk已准时在TechBeat人工智能社区开播&#xff01; 她与大家分享的主题是: “ AutoGen&#xff1a;用多智能体对话开启下一代大型语言模…

安卓毕业设计基于安卓android微信小程序的大学生心理测试系统

运行环境 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&a…

7.5寸电子会议桌牌

银色外框设计&#xff0c;高端大气~ 超低功耗&#xff0c;常规使用寿命3-5年! 点阵电子纸屏幕&#xff0c;实现完全无纸化&#xff0c;循环使用&#xff0c;绿色环保&#xff01; 四色/七色清晰显示&#xff0c;内容更丰富。 一次投入&#xff0c;省时省力更省事&#xff0…

2023年中国工业炉分类、产量及市场规模分析[图]

工业炉是指在工业生产中利用燃料燃烧或电能等转换产生的热量&#xff0c;将物料或工件进行熔炼、熔化、焙&#xff08;煅&#xff09;烧、加热、干馏、气化等的热工设备&#xff1b;广泛应用于机械、冶金、化工及陶瓷等国民经济的各行各业&#xff0c;具有生产效率高、产品质量…