主串长度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算法相关推荐

  1. 字符串匹配—BF算法和KMP算法

    BF算法 本章重点是是KMP算法,但是由于其较难理解,先从更简单朴素的BF算法开始. 其思路非常简单 也就是,对这样两个字符串(称短的为模式串,长的为主串): 让主串和模式串的每个字符逐个匹配,如果从 ...

  2. 字符串匹配代码C语言,KMP算法(快速模式匹配算法)详解以及C语言实现

    通过上一节的介绍,学习了普通模式匹配算法,大体思路是:模式串从主串的第一个字符开始匹配,每匹配失败,主串中记录匹配进度的指针 i 都要进行 i-j+1 的回退操作(这个过程称为"指针回溯&q ...

  3. Algorithm:C++语言实现之字符串相关算法(字符串的循环左移、字符串的全排列、带有同个字符的全排列、串匹配问题的BF算法和KMP算法)

    Algorithm:C++语言实现之字符串相关算法(字符串的循环左移.字符串的全排列.带有同个字符的全排列.串匹配问题的BF算法和KMP算法) 目录 一.字符串的算法 1.字符串的循环左移 2.字符串 ...

  4. BF算法和KMP算法

    给定两个字符串S和T,在主串S中查找子串T的过程称为串匹配(string matching,也称模式匹配),T称为模式.这里将介绍处理串匹配问题的两种算法,BF算法和KMP算法. BF算法 (暴力匹配 ...

  5. 若S作主串,P作模式串,试分别写出利用BF算法和KMP算法的匹配过程。

    目   录 题目: 百度文库-答案: (1) (2) MOOC标准答案: (1) (2) mooc答案-截图: 数据结构(C语言版)-严蔚敏2007 题目: 设字符串S='aabaabaabaac', ...

  6. 【数据结构与算法】字符串匹配 BF算法 RK算法

    单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法 多模式串匹配算法 Trie 树和 AC 自动机 一.BF 算法 1,BF算法是Brute Force的缩写,中文译作暴力匹配算法,也 ...

  7. 【算法无用系列】字符串匹配那些事——BM算法

    文章目录 前言 一.BM算法 1.1.坏字符规则 1.2.好后缀规则 前言 BF算法和RK算法思路比较简单,但是效率却不尽人意,适合较短的字符串匹配时使用,如果需要在较长的字符串匹配时,则需在算法上进 ...

  8. 数据结构与算法 / 字符串匹配 / BF、PK 算法

    零.前言 为了下面便于说明,先定义两个名词,分别是主串和模式串.在字符串 A 中查找字符串 B,则 A 为主串,B 为模式串. 假设,主串中字符数量为 L1,模式串的字符数量为 L2 . 一.BF 算 ...

  9. 模式串匹配的BF算法和KMP算法

    KMP是三位大牛:D.E.Knuth.J.H.Morris和V.R.Pratt同时发现的.为了解决模式匹配问题,也即寻找模式串(子串)在主串中第一次出现的位置,若模式串在主串中不存在则返回-1. 简单 ...

最新文章

  1. 平衡二叉树的构造_LeetCode 题解 | 110.平衡二叉树
  2. npm无法安装node-sass的解决方法
  3. 网站优化有什么值得注意的小细节吗?
  4. Python 数据结构视频教程五
  5. java.io.IOException: No space left on device
  6. patent filter
  7. Oracle代码块详解,Oracle可执行代码块
  8. python3.8学习_python3.8.1 入门基础学习 之 【字典】 学习
  9. Unity SRP自定义渲染管线 -- 3.Lights
  10. 顺序程序设计03 - 零基础入门学习C语言09
  11. 英特尔再现安全漏洞:2011年后计算机几乎全中枪,可窃取你的密码及数据
  12. 算法:回溯十五 Palindrome Partitioning字符串的字符串为回文所有解集合(2中解法)
  13. 灵悟礼品网上专卖店——第三阶段Sprint
  14. arctanx麦克劳林公式推导过程_高中数学三角函数公式大全,竞赛高考都适用(含公式推导)...
  15. 【Code】8位编程语言的创始人,你知道几位?
  16. 使用Vue解决跨域问题
  17. 文章阅读 - 机器学习检测DNS隧道
  18. IBM X 345服务器无法从光驱启动配置解决方法——非常规方法
  19. 物联网毕业设计 - 基于单片机的自动写字机器人
  20. Oracle常见问题一千问

热门文章

  1. 诗与远方:无题(二十七)- 写给我妹妹的一首诗
  2. MySQL数据库常用命令汇总
  3. bookkeeper源码解析
  4. Struts2之HttpServletRequest、HttpServletResponse,HttpSession,Parameters处理
  5. Struts2项目搭建
  6. AOP Error creating bean with name ‘myCaculator‘ defined in file [XXX]
  7. 全网最好懂的Spring AOP原理
  8. 日常 Python 编程优雅之道
  9. RestTemplate.getForObject返回List的时候处理方式
  10. Java数据库驱动链接大全