kmp字符串模式匹配算法
来源:互联网 发布:seo招聘要求 编辑:程序博客网 时间:2024/05/17 22:17
概述
kmp算法我觉得有两个关键点:1.计算模式字符串的部分匹配表(这时候,自己跟自己比较)2.匹配主串时候,主串字符只遍历一遍,匹配时候,根据模式串的部分匹配表计算模式串应该移动的位置。kmp算法时间复杂度为O(m+n);下面我实现的算法代码(PHP)
理论
关于kmp理论部分,这篇文章写得好:http://kb.cnblogs.com/page/176818/。我就不再赘述了。
计算部分匹配表
function kmp_next($string){ $length = strlen($string);//获取字符串长度 $next[0] =0; $j =0; $i = 1; while($i<$length){ if($string{$j} == $string{$i}){ $j++; $next[$i]= $j; $i++; }else if($j == 0){ $next[$i] =$j; $i++; }else{ $j=$next[$j]; } } return $next;}
kmp算法
function kmp($text,$mode){ $t_length = strlen($text); $m_length = strlen($mode); if($t_length < $m_length){ return -1; } $arr = kmp_next($mode); $j=0;$i=0; while($i<$t_length){ if($text{$i}==$mode{$j}){ if($j < $m_length-1){ $j++;$i++; }else{ return $i-$m_length+1; } }else if($j==0){ $i++; }else{ $j=$arr[$j-1]; } } return -1;}
调用
$string = 'BBC ABCDAB ABCDABCDABDE';$mode = 'ABCDABD';$key = kmp($string,$mode);var_dump(kmp_next($mode));var_dump($key);var_dump(substr($string,$key,strlen($mode)));
结果
1 0
- 字符串模式匹配KMP算法
- 字符串模式匹配KMP算法
- KMP字符串模式匹配算法
- 字符串模式匹配KMP算法
- KMP字符串模式匹配算法
- KMP字符串模式匹配算法
- 字符串模式匹配KMP算法
- KMP 字符串模式匹配算法
- 字符串模式匹配KMP算法
- 字符串模式匹配KMP算法
- 算法 字符串模式匹配KMP
- KMP字符串模式匹配算法
- 字符串KMP模式匹配算法
- KMP字符串模式匹配算法
- 字符串模式匹配----KMP算法
- kmp字符串模式匹配算法
- 字符串模式匹配KMP算法
- KMP字符串模式匹配算法
- IOS 字典转json 解决全角问题
- linux route命令
- js 正则
- 基于三层路由的高可用方法 BGP(边界网关协议)
- 一个tomcat部署多个项目
- kmp字符串模式匹配算法
- Android模拟器——QEMU
- Github 终于理解了 Watch 和 Star 的区别
- Scan之新发现
- ubuntu /boot 空间显示不足
- 开源的SDN路由交换项目(翻译)
- Linux2.24.2的4.3寸LCD和DM9000网卡移植
- 本地调试微信接口方法
- tomcat改端口