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-11-11开源 PHP 商城项目 CRMEB 二次开发和部署教程
- 2024-11-09怎么使用php在kaufland平台刊登商品?-icode9专业技术文章分享
- 2024-11-05PHP的抽象类和接口是什么,有什么区别-icode9专业技术文章分享
- 2024-11-01开源 PHP 商城项目 CRMEB 安装和使用教程
- 2024-11-01用php和mysql写无限分类,有哪几种方法-icode9专业技术文章分享
- 2024-10-31php数据分表导出时部分数据无法导出什么原因-icode9专业技术文章分享
- 2024-10-30有经验的 PHP 开发者学习一门新的编程语言,有哪些推荐的有前景的语言-icode9专业技术文章分享
- 2024-10-21php 检测图片是否篡改过-icode9专业技术文章分享
- 2024-10-20fruitcake/php-cors 该怎么使用-icode9专业技术文章分享
- 2024-10-18PHP7.1可以使用哪个版本的swoole-icode9专业技术文章分享