本篇介绍几种常见字符串匹配算法,分别为
- BF算法(Brute Force,也就是暴力算法)
- KMP算法(Knuth-Morria-Pratt算法,其实就是这三个人共同提出的)
- BM算法(Boyer-Moore)
- Sunday算法(由Daniel M.Sunday在1990年提出)
Brute Force算法
也就是我们所谓的暴力算法。
顾名思义,假如有两个字符串:
- M(主串/被比较/m个字符)
- N(模式串/拿去比较/n个字符)
如图所示:
从左向右比较,开始时,若相同则M往后一位,N往后一位继续比,若不相同则M从第二位开始,N从第一位开始比较,依此类推。
最坏时N的比较要循环m次,且每一位都要被比,因此最坏时间复杂度为O(n*m)
KMP算法
KMP算法用文字描述相当的不直观,需要不停地变化,因此这里我直接搬上我兄弟Carl的视频,讲的非常清楚,大家也可以关注一波。
理论篇
<iframe allowfullscreen="allowfullscreen" frameborder="0" height="600px" scrolling="no" src="https://player.bilibili.com/player.html?aid=712030093&bvid=BV1PD4y1o7nd&cid=234332326&page=1&as_wide=1&high_quality=1&danmaku=0" width="100%"></iframe>next函数构造篇
<iframe allowfullscreen="allowfullscreen" frameborder="0" height="600px" scrolling="no" src="https://player.bilibili.com/player.html?aid=457239548&bvid=BV1M5411j7Xx&cid=237602669&page=1&as_wide=1&high_quality=1&danmaku=0" width="100%"></iframe>BM算法
标签:BF,BM,Sunday,算法,KMP,字符串 来源: https://www.cnblogs.com/airuler/p/13955832.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。