字符串查找之KMP算法

首先了解一个概念:前缀和后缀

以DBDCD为例:

    前缀:D

             DB

             DBD

             DBDC

    后缀:D

             CD           

             DCD

             BDCD

首先在该算法中具有一个概念:部分匹配值,部分匹配值为该字符串前缀与后缀的重合数量,还是以上例子,DBDCD的部分匹配值为  1  

我们这里先知道这个概念,后面会用到。

正题开始:

在ABCDABCCABCDEEEEE中查找ABCDE

ABCDABCCABCDEEEE        

步骤一:

     ABCDABCCABCDEEEEE    

     ABCDE

     首先匹配ABCD,但是E不匹配,ABCD的部分匹配值为0,向后移(4-0)也就是4位。

    

 移动距离 = 已经匹配的字符数量 – 已经匹配的字符串部分匹配值 

步骤二:

     ABCDABCCABCDEEEEE    

             ABCDE

     此时匹配ABC,D无法匹配,根据上述算法,后移3位

步骤三:

    ABCDABCCABCDEEEEE         

                   ABCDE     

    后移

步骤四:

    ABCDABCCABCDEEEEE         

                     ABCDE     

    此时完全匹配完成!


总结:在此过程中,计算部分匹配值就是为了避免重复匹配一定匹配不上的字符。                  

   

    原文作者:KMP算法
    原文地址: https://blog.csdn.net/qq_38789954/article/details/80225428
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞