PHP实现KMP算法


<?php
    global $str,$goal,$slen,$glen;     $str = 'ABCDAVABCDUIABBABCDABACAI';     $slen = strlen($str);     $goal = 'ABCD';     $glen = strlen($goal);
    //bruet force or kmp     function _exec()     {         global $str,$goal,$slen,$glen;         $next = travel();         $a = 0;         $b = 0;         while($a < $slen && $b < $glen)         {             if($b == -1  || $str[$a] == $goal[$b])             {                 $a++;                 $b++;             }else{                 $b = $next[$b];                 // $b = 0;             }             // $a++;             }
        if($b >= $glen){             var_dump($a - $glen);         }else{             var_dump(-1);         }     }
    function travel()     {         global $goal,$glen;         $a = 0;         $b = -1;         $next[0] = -1;         while($a < $glen-1)         {             if($b == -1 || $goal[$a] == $goal[$b])             {                 $a++;                 $b++;                 if($goal[$a] == $goal[$b])                 {                     $next[$a] = $next[$b];                 }else{                     $next[$a] = $b;                 }             }else{                 $b = $next[$b];             }         }         return $next;     }
    _exec();
PHP