博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符串查找算法总结(暴力匹配、KMP 算法、Boyer-Moore 算法和 Sunday 算法)
阅读量:6952 次
发布时间:2019-06-27

本文共 609 字,大约阅读时间需要 2 分钟。

字符串匹配是字符串的一种基本操作:给定一个长度为 M 的文本和一个长度为 N 的模式串,在文本中找到一个和该模式相符的子字符串,并返回该字字符串在文本中的位置。

KMP 算法,全称是 Knuth-Morris-Pratt 算法,以三个发明者命名,开头的那个K就是著名科学家 Donald Knuth 。KMP 算法的关键是求 next 数组。next 数组的长度为模式串的长度。next 数组中每个值代表模式串中当前字符前面的字符串中,有多大长度的相同前缀后缀。

Boyer-Moore 算法在实际应用中比 KMP 算法效率高,据说各种文本编辑器的"查找"功能(Ctrl+F),包括 linux 里的 grep 命令,都是采用 Boyer-Moore 算法。该算法有“坏字符”和“好后缀”两个概念。主要特点是字符串从后往前匹配。

Sunday 算法跟 KMP 算法一样,是从前往后匹配。在匹配失败时,关注文本串中参加匹配的最末位字符的下一位字符,如果该字符不在模式串中,则整个模式串移动到该字符之后。如果该字符在模式串中,将模式串右移使对应的字符对齐。

关于这几种算法的详细介绍,可参考。

下面分别给出暴力匹配、KMP 算法、Boyer-Moore 算法和 Sunday 算法的 Java 实现。

暴力匹配:

 

KMP 算法:

 

Boyer-Moore 算法

 

Sunday算法

 
http://linbingdong.com

转载地址:http://yhkil.baihongyu.com/

你可能感兴趣的文章
iOS开发个人开发账号的证书详细使用及介绍
查看>>
尺取法
查看>>
Your APP_BUILD_SCRIPT points to an unknown file: ./jni/Android.mk
查看>>
NOIP-珠心算
查看>>
使用crypt配置Basic Auth登录认证
查看>>
sklearn
查看>>
linux命令系列目录
查看>>
sql server 2008学习1–系统数据库
查看>>
sql server08 查询优化系列 3-2 sql 查询性能分析
查看>>
JS 变量
查看>>
访问图像像素信息方式的优化
查看>>
小小笔试题(二)
查看>>
centos7安装python3 以及tab补全功能
查看>>
《Android深入透析》之常用设计模式经验谈
查看>>
leetcode539
查看>>
归并排序实现
查看>>
leetcode91
查看>>
Qt中实现菜单和工具栏功能
查看>>
java相关技术问答(二)
查看>>
网络攻防实验(二)——201521460003王浩洋
查看>>