PHP实现KMP算法
2021/8/22 9:36:17
本文主要是介绍PHP实现KMP算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
<?php//构建部分匹配表 function part_match($goal,$match=null) { static $match; $length = strlen($goal); if($length < 2){ return; } for($i=0;$i<$length-1;$i++){ $left[] = substr($goal,0,$i+1); $right[] = substr($goal,1+$i,$length-$i); } foreach(array_intersect($left,$right) as $v){ $len = strlen($v); if($len > 1){ $match[$v[$len-1]] = $len; continue; } $match[$v] = $len; } part_match(rtrim($goal,$goal[$length-1])); return $match; }
//执行kmp算法 function kmp($str,$goal) { $map = part_match($goal); if(is_null($map) || empty($map)){ return null; } $glen = strlen($goal); $result = []; @[$a,$b] = [0,0]; while($b < $glen){ if($str[$a] == $goal[$b]){ $result[$b] = $str[$a]; $a++; $b++; continue; } if($b==0){ $a++; continue; } //如果出现不匹配的情况,则a减一查找最后一次匹配顺序正确的数值 //将$goal当前的key值减去减去不需要在比较的部分得出$b要往回挪动的数值 $b = $b - ($b - $map[$str[$a-1]]); } return implode('',$result); }
$str = "BBC ABCDAB ABCDABCDABDEBDQQQDQQQQDEFDQQQQQ"; $goal = "DQQQQDEFD"; $res = kmp($str,$goal); var_dump($res);
这篇关于PHP实现KMP算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-19php8的协程和hyperf的协程有什么区别?-icode9专业技术文章分享
- 2024-12-19php8 的fiber是什么?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-11-29使用PHP 将ETH账户的资产汇集到一个账户
- 2024-11-23怎么实现安卓+php 热更新方案?-icode9专业技术文章分享
- 2024-11-22PHP 中怎么实现判断多个值是否为空、null 或者为 false?-icode9专业技术文章分享
- 2024-11-11开源 PHP 商城项目 CRMEB 二次开发和部署教程
- 2024-11-09怎么使用php在kaufland平台刊登商品?-icode9专业技术文章分享
- 2024-11-05PHP的抽象类和接口是什么,有什么区别-icode9专业技术文章分享