Example #1
0
}
/**
 * @todo kmp算法查找字符串
 * @param string @string 目标串
 * @param string @pattern 模式串
 * @author houweizong@gmail.com
 * **/
function kmp($string, $pattern)
{
    $next = array();
    findNextVal($pattern, $next);
    $ml = strlen($string);
    $pl = strlen($pattern);
    $i = 0;
    $j = 0;
    while ($i < $ml - $pl) {
        while ($j == 0 || $j < $pl && $string[$i] == $pattern[$j]) {
            $i++;
            $j++;
        }
        if ($j == $pl) {
            return $i - $pl;
        }
        $j = $next[$j];
    }
    return -1;
}
$pattern = 'abshhh';
$string = 'sssssssssssssssssssababababshhabhshhhabshhhabsabsabs';
$s = kmp($string, $pattern);
var_dump($s);
Example #2
0
File: kmp.php Project: lughong/shop
<?php

function kmp($arr)
{
    $len = strlen($arr);
    $k = 0;
    $next[0] = 0;
    for ($i = 1; $i < $len; $i++) {
        if ($k > 0 && $arr[$i] != $arr[$k]) {
            $k = $next[$k - 1];
        }
        if ($arr[$i] == $arr[$k]) {
            $k++;
        }
        $next[$i] = $k;
    }
    return $next;
}
$arr = 'ababaab';
$arr = kmp($arr);
print_r($arr);