这篇文章来说说如何简单理解KMP,BM算法。之前看过一些文章说,KMP算法很难理解。 可我并不觉得。 我反而觉得它容易理解。
平时我们写java代码的时候, 判断一个字符串是否存在包含另一个字符串都是直接 string.contains(str), 可你知道它是实现的么? 不妨亲自去看看它是如何实现的?
看此文章之前,严重建议先去看看阮一峰老师写的的KMP算法文章。如果那篇文章都可以完全理解了,那么就没必要看这篇文章浪费时间了。
字符串匹配在平时开发中还是很常用的,只不过我们一般都是调用jdk提供的方法直接使用。
下面以这个为例子,来描述KMP算法原理。
在字符串"BBCABCDABABCDABCDABDE",判断里面是否包含另一个字符串"ABCDABD"?
在字符串匹配算法中,我们除了可以逐一匹配之外,别无它法。包括KMP,BM算法也是逐一匹配的,只不过是KMP,BM算法用了很多讨巧的方式提高了匹配效率。
首先先来看看暴力匹配,暴力匹配就是逐一匹配,当匹配失败后,子串往后移动一个字符。