当前位置:首页 > PHP

php实现kmp

2026-01-30 03:59:18PHP

KMP算法简介

KMP算法是一种高效的字符串匹配算法,由Knuth、Morris和Pratt共同提出。该算法通过预处理模式串生成部分匹配表(Partial Match Table),利用已匹配信息减少不必要的比较次数,时间复杂度为O(n+m)。

PHP实现KMP算法

构建部分匹配表(PMT)

部分匹配表记录模式串前缀与后缀的最长公共长度。对于模式串$pattern,其PMT构建代码如下:

function computeLPSArray($pattern) {
    $len = 0;
    $lps = [0];
    $i = 1;
    $M = strlen($pattern);

    while ($i < $M) {
        if ($pattern[$i] == $pattern[$len]) {
            $len++;
            $lps[$i] = $len;
            $i++;
        } else {
            if ($len != 0) {
                $len = $lps[$len - 1];
            } else {
                $lps[$i] = 0;
                $i++;
            }
        }
    }
    return $lps;
}

KMP搜索实现

利用PMT进行字符串匹配,跳过已确认不匹配的部分:

function KMPSearch($pattern, $text) {
    $M = strlen($pattern);
    $N = strlen($text);
    $lps = computeLPSArray($pattern);
    $i = $j = 0;

    while ($i < $N) {
        if ($pattern[$j] == $text[$i]) {
            $i++;
            $j++;
        }
        if ($j == $M) {
            echo "Found pattern at index " . ($i - $j) . "\n";
            $j = $lps[$j - 1];
        } elseif ($i < $N && $pattern[$j] != $text[$i]) {
            if ($j != 0) {
                $j = $lps[$j - 1];
            } else {
                $i++;
            }
        }
    }
}

使用示例

$text = "ABABDABACDABABCABAB";
$pattern = "ABABCABAB";
KMPSearch($pattern, $text);
// 输出:Found pattern at index 10

关键点说明

  • PMT构建:通过比较前缀和后缀确定最长公共长度,避免重复比较。
  • 搜索优化:当字符不匹配时,根据PMT跳过已知匹配部分,减少回溯次数。
  • 时间复杂度:预处理阶段O(m),搜索阶段O(n),优于暴力匹配的O(n*m)。

注意事项

  • 模式串和文本需为单字节字符(如ASCII),多字节字符(如UTF-8)需额外处理。
  • 实际应用中可封装为类,增加偏移量参数等扩展功能。

php实现kmp

标签: phpkmp
分享给朋友:

相关文章

php实现文件下载

php实现文件下载

PHP实现文件下载的方法 通过PHP实现文件下载功能,可以采用多种方式,以下是几种常见的实现方法: 使用header()函数强制下载 设置HTTP头信息,强制浏览器下载文件而非直接打开: $fi…

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class…

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Rat…

php 实现登录

php 实现登录

PHP 登录功能实现 使用 PHP 实现登录功能通常需要结合数据库验证和会话管理。以下是一个基本的登录实现流程: 数据库准备 创建用户表存储用户名和密码(建议使用哈希加密): CREATE TAB…

php验证码的实现

php验证码的实现

PHP 验证码实现方法 使用 GD 库生成基础验证码 创建画布并生成随机字符串作为验证码内容: session_start(); $width = 120; $height = 40; $imag…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注意…