关于 KMP 算法的个人理解(Java初学者)
大二上学期的时候,学习数据结构,偶尔接触了KMP算法,那个时候没特别理解,为了应付考试,就仅仅是看了前缀后缀那个知识点,刚刚打算好好看一看,因为最近在学习java,老师提到了一句,自己刚刚查阅资料研究的时候,感觉对于小白来说很难理解,一下是我的一些看法。
KMP算法的用处
在一个长的字符串里寻找一个短的字符串,有一种暴力解法,举个例子。
** a b a b a**
a b a
在ababa中寻找aba,可以这样对照。(粗的是一样的)如下图;
这个暴力求解,我们可以看出,只要主串足够长,那么在主串中寻找子串的位置就越难!假设主串长度是m,而子串长度是n , 那么这个计算相当于是一个双重循环!(如上图ababb中寻找abb)
先从主串a开始依次对比子串的abb,如果不对就从主串的b开始再依次对比子串的abb。就有点类似于
for(ababb){
for(abb){
}
}
这样显然是很慢的,那么有没有一种方法,因为子串是固定呢,能不能在往