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();
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();