听说室友最近在搞这个,所以我也搞了一下。。
大概就是翻了翻别人的博客看了看,自己打了打,感觉不是很难但是不知道为什么感觉看的博客的思路很啰嗦。
我自学的时候看了两篇博客,这两个博主都很厉害,建议先按顺序看看这两篇博客(如果看懂了的话就不要再看我下面写的了,不懂next数组的话我倒是提供了另一种好理解的替代办法):
一:
kb.cnblogs.com/page/176818
二:
/*下面这段有摘抄,出自:http://blog.csdn.net/hereiskxm/article/details/8065751 */
KMP算法是用来处理从源串(文本串)中查找目的串(模式串)的一个相对高效的算法,然而并不是最高效的算法,比之高效的还有
Boyer-Moore(理论上复杂度和KMP差不多,但是实践起来比KMP快了数倍,但是特别复杂)。然后还有一个Sunday算法(据说也比BM算法快了很多)。然后还有RK算法、字符串匹配自动机 后缀树算法(分在线和非在线两种)等 见如下文章。不能说那个比那个更好,各个算法都有自己的优势及最佳应用场合。参考:
http://blog.csdn.net/yifan403/archive/2009/06/16/4272793.aspx
另外,关于多模式字符串匹配 有AC算法(字符串匹配自动机思想) WM算法(BM在多模式的推广应用)
参考:
http://blog.csdn.net/ijuliet/category/498465.aspx 该女子的blog有很多好文章。
/*摘抄完毕*/
我对KMP算法的理解是,基于对目的串(模式串)前缀后缀的研究,改进暴力匹配得一种方法。
我并没有打出NEXT数组因为NEXT数组我虽然知道是个什么意思,用起来也挺直观但是不好理解。(毕竟我也才学会不久。。)
以下是我实现的“KMP”
中间貌似出现了些错误。所以留个位置下次补上
现在最重要的东西都已经弄出来了,之后就是怎么根据这个表移位置了。
相信通过开头两篇博客的介绍再加上我的瞎逼逼你已经懵逼了。