KMP算法(研究总结,字符串)

KMP算法(研究总结,字符串)

前段时间学习KMP算法,感觉有些复杂,不过好歹是弄懂啦,简单地记录一下,方便以后自己回忆。

引入

首先我们来看一个例子,现在有两个字符串A和B,问你在A中是否有B,有几个?为了方便叙述,我们先给定两个字符串的值
A="abcaabababaa"
B="abab"

那么普通的匹配是怎么操作的呢?
当然就是一位一位地比啦。(下面用蓝色表示已经匹配,黑色表示匹配失败)
移动开发培训,Android培训,安卓培训,手机开发培训,手机维修培训,手机软件培训
但是我们发现这样匹配很浪费!
为什么这么说呢,我们看到第4步:
移动开发培训,Android培训,安卓培训,手机开发培训,手机维修培训,手机软件培训
在第4步的时候,我们发现第3位上c与a不匹配,然后第五步的时候我们把B串向后移一位,再从第一个开始匹配。
移动开发培训,Android培训,安卓培训,手机开发培训,手机维修培训,手机软件培训
这里就有一个对已知信息很大的浪费,因为根据前面的匹配结果,我们知道B串的前两位是ab,所以不管怎么移,都是不能和b匹配的,所以应该直接跳过对A串第二位的匹配,对于A串的第三位也是同理。

或许这这个例子还不够经典,我们再举一个。

A="abbaabbbabaa"
B="abbaaba"

在这个