字符串匹配BF/RK/BM/KMP算法
主串长度m,匹配串(模式串)长度n。
一、BF
强制算法比较,最容易想到的,时间复杂度O(m*n)
二、RK
计算出匹配串的哈希值,遍历主串,求每次对应位置相同长度的子串哈希值,比较两者是否相同。
若不相同,则肯定不匹配,主串调至下一位。若相同,由于哈希可能碰撞,还需逐个字符比较。
时间复杂度O(m)
三、BM
①,模式串与主串左对齐,从后向前比较,发现主串 T与模式串G不相等。再从模式串中此位置开始向前找到字符T位置。
②,模式串字符T位置和主串T位置对齐后,再从后向前匹配,发现直到主串A和模式串G不匹配,在从模式串中此位置开始向前找到字符A位置。
③、模式串A位置和主串A位置对齐,再从后向前便利是否匹配。发现全部匹配则找到。
四、KMP
public static int kmp(String str, String pattern) {//预处理,生成next数组int[] next = getNexts(pattern);int j = 0;for (int i = 0; i < str.length(); i++) {while (j>0 && pattern.charAt(j)!=str.charAt(i)){//遇到坏字符时,查询next数组并改变模式串的起点j = next[j];}if(pattern.charAt(j)==str.charAt(i)){j++;}if(j == pattern.length()){return i - pattern.length() + 1 ;}}return -1;}// 生成Next数组private static int[] getNexts(String pattern) {int next[] = new int[pattern.length()];next[0]=-1;int j = 0;for (int i = 2; i < pattern.length(); i++) {while (j!=0 && pattern.charAt(i-1)!=pattern.charAt(j)){//从next[i+1]的求解回溯到 next[j]j=next[j];}if(pattern.charAt(i-1)==pattern.charAt(j)){j++;}next[i]=j;}return next;}
时间复杂度O(m+n),空间复杂度O(n)
字符串匹配BF/RK/BM/KMP算法相关推荐
- 字符串匹配—BF算法和KMP算法
BF算法 本章重点是是KMP算法,但是由于其较难理解,先从更简单朴素的BF算法开始. 其思路非常简单 也就是,对这样两个字符串(称短的为模式串,长的为主串): 让主串和模式串的每个字符逐个匹配,如果从 ...
- 字符串匹配代码C语言,KMP算法(快速模式匹配算法)详解以及C语言实现
通过上一节的介绍,学习了普通模式匹配算法,大体思路是:模式串从主串的第一个字符开始匹配,每匹配失败,主串中记录匹配进度的指针 i 都要进行 i-j+1 的回退操作(这个过程称为"指针回溯&q ...
- Algorithm:C++语言实现之字符串相关算法(字符串的循环左移、字符串的全排列、带有同个字符的全排列、串匹配问题的BF算法和KMP算法)
Algorithm:C++语言实现之字符串相关算法(字符串的循环左移.字符串的全排列.带有同个字符的全排列.串匹配问题的BF算法和KMP算法) 目录 一.字符串的算法 1.字符串的循环左移 2.字符串 ...
- BF算法和KMP算法
给定两个字符串S和T,在主串S中查找子串T的过程称为串匹配(string matching,也称模式匹配),T称为模式.这里将介绍处理串匹配问题的两种算法,BF算法和KMP算法. BF算法 (暴力匹配 ...
- 若S作主串,P作模式串,试分别写出利用BF算法和KMP算法的匹配过程。
目 录 题目: 百度文库-答案: (1) (2) MOOC标准答案: (1) (2) mooc答案-截图: 数据结构(C语言版)-严蔚敏2007 题目: 设字符串S='aabaabaabaac', ...
- 【数据结构与算法】字符串匹配 BF算法 RK算法
单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法 多模式串匹配算法 Trie 树和 AC 自动机 一.BF 算法 1,BF算法是Brute Force的缩写,中文译作暴力匹配算法,也 ...
- 【算法无用系列】字符串匹配那些事——BM算法
文章目录 前言 一.BM算法 1.1.坏字符规则 1.2.好后缀规则 前言 BF算法和RK算法思路比较简单,但是效率却不尽人意,适合较短的字符串匹配时使用,如果需要在较长的字符串匹配时,则需在算法上进 ...
- 数据结构与算法 / 字符串匹配 / BF、PK 算法
零.前言 为了下面便于说明,先定义两个名词,分别是主串和模式串.在字符串 A 中查找字符串 B,则 A 为主串,B 为模式串. 假设,主串中字符数量为 L1,模式串的字符数量为 L2 . 一.BF 算 ...
- 模式串匹配的BF算法和KMP算法
KMP是三位大牛:D.E.Knuth.J.H.Morris和V.R.Pratt同时发现的.为了解决模式匹配问题,也即寻找模式串(子串)在主串中第一次出现的位置,若模式串在主串中不存在则返回-1. 简单 ...
最新文章
- 平衡二叉树的构造_LeetCode 题解 | 110.平衡二叉树
- npm无法安装node-sass的解决方法
- 网站优化有什么值得注意的小细节吗?
- Python 数据结构视频教程五
- java.io.IOException: No space left on device
- patent filter
- Oracle代码块详解,Oracle可执行代码块
- python3.8学习_python3.8.1 入门基础学习 之 【字典】 学习
- Unity SRP自定义渲染管线 -- 3.Lights
- 顺序程序设计03 - 零基础入门学习C语言09
- 英特尔再现安全漏洞:2011年后计算机几乎全中枪,可窃取你的密码及数据
- 算法:回溯十五 Palindrome Partitioning字符串的字符串为回文所有解集合(2中解法)
- 灵悟礼品网上专卖店——第三阶段Sprint
- arctanx麦克劳林公式推导过程_高中数学三角函数公式大全,竞赛高考都适用(含公式推导)...
- 【Code】8位编程语言的创始人,你知道几位?
- 使用Vue解决跨域问题
- 文章阅读 - 机器学习检测DNS隧道
- IBM X 345服务器无法从光驱启动配置解决方法——非常规方法
- 物联网毕业设计 - 基于单片机的自动写字机器人
- Oracle常见问题一千问
热门文章
- 诗与远方:无题(二十七)- 写给我妹妹的一首诗
- MySQL数据库常用命令汇总
- bookkeeper源码解析
- Struts2之HttpServletRequest、HttpServletResponse,HttpSession,Parameters处理
- Struts2项目搭建
- AOP Error creating bean with name ‘myCaculator‘ defined in file [XXX]
- 全网最好懂的Spring AOP原理
- 日常 Python 编程优雅之道
- RestTemplate.getForObject返回List的时候处理方式
- Java数据库驱动链接大全