<?php
$a = array("a","b","a","b","a","b","a","b","a","b","a","b", "d", "d", "a", "b", "d");
$str = array("a","b", "c", "d", "a", "b", "d");
$next = array();
nextarr($str, $next);
foreach($next as $val){
echo $val . ",";
}
find($next, $a, $str);
function nextarr($str, &$nexts){
$k = -1;
$j = 0;
$nexts[0] = -1;
while($j < count($str)){
if($k == -1 || $str[$j] == $str[$k]){
$j++;
$k++;
$nexts[$j] = $k;
}else{
$k = $nexts[$k];
}
}
}
function find($next, $a, $b){
$lena = count($a);
$lenb = count($b);
$i = 0;
$j = 0;
while($i < $lena && $j < $lenb){
if($j == -1 || $a[$i] == $b[$j]){
$i++;
$j++;
}else{
$j = $next[$j];
}
}
if($j == $lenb){
echo "\n位置:" . ($i-$j);
}else{
echo "\n位置:" . -1;
}
}
算法复习---KMP算法
最新推荐文章于 2022-09-15 23:49:48 发布