PHP实现的字符串匹配算法示例【sunday算法】


Posted in PHP onDecember 19, 2017

本文实例讲述了PHP实现的字符串匹配算法————sunday算法。分享给大家供大家参考,具体如下:

Sunday算法是Daniel M.Sunday于1990年提出的字符串模式匹配。其核心思想是:在匹配过程中,模式串发现不匹配时,算法能跳过尽可能多的字符以进行下一步的匹配,从而提高了匹配效率。

<?php
/*
 *@param $pattern 模式串
 *@param $text 待匹配串
 */
function mySunday($pattern = '',$text = ''){
  if(!$pattern || !$text) return false;
  $pattern_len = mb_strlen($pattern);
  $text_len = mb_strlen($text);
  if($pattern_len >= $text_len) return false;
  $i = 0;
  for($i = 0; $i < $pattern_len; $i++){ //组装以pattern中的字符为下标的数组
    $shift[$pattern[$i]] = $pattern_len - $i;
  }
  while($i <= $text_len - $pattern_len){
    $nums = 0;   //匹配上的字符个数
    while($pattern[$nums] == $text[$i + $nums]){
      $nums++;
      if($nums == $pattern_len){
        return "The first match index is $i\n";
      }
    }
    if($i + $pattern_len < $text_len && isset($shift[$text[$i + $pattern_len]])){ //判断模式串后一位字符是否在模式串中
      $i += $shift[$text[$i + $pattern_len]];   //对齐该字符
    }else{
      $i += $pattern_len;   //直接滑动pattern_len位
    }
  }
}
$text = "I am testing mySunday on sunday!";
$pattern = "sunday";
echo mySunday($pattern,$text);

运行结果:

The first match index is 25

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP 已经成熟
Dec 04 PHP
php Smarty初体验二 获取配置信息
Aug 08 PHP
使用PHP Socket写的POP3类
Oct 30 PHP
PHP用身份证号获取星座和生肖的方法
Nov 07 PHP
测试php函数的方法
Nov 13 PHP
ThinkPHP 3.2 数据分页代码分享
Oct 14 PHP
PHP队列用法实例
Nov 05 PHP
php接口数据加密、解密、验证签名
Mar 12 PHP
php开发微信支付获取用户地址
Oct 04 PHP
PHP利用百度ai实现文本和图片审核
May 08 PHP
基于PHP实现发微博动态代码实例
Dec 11 PHP
php框架知识点的整理和补充
Mar 01 PHP
PHP实现的折半查找算法示例
Dec 19 #PHP
php之header的不同用法总结(实例讲解)
Nov 28 #PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
Nov 28 #PHP
PHP命令空间namespace及use的用法小结
Nov 27 #PHP
Laravel 批量更新多条数据的示例
Nov 27 #PHP
PHP开发实现微信退款功能示例
Nov 25 #PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 #PHP
You might like
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
php时区转换转换函数
2014/01/07 PHP
深入理解PHP原理之执行周期分析
2016/06/01 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
重定向实现代码
2006/11/20 Javascript
TopList标签和JavaScript结合两例
2007/08/12 Javascript
Cookie 小记
2010/04/01 Javascript
js定时器(执行一次、重复执行)
2014/03/07 Javascript
jquery获取checkbox的值并post提交
2015/01/14 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
再次谈论React.js实现原生js拖拽效果引起的一系列问题
2016/04/03 Javascript
深入理解Angular.JS中的Scope继承
2017/06/04 Javascript
浅谈AngularJS中$http服务的简单用法
2018/05/15 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
2019/09/24 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
2020/04/09 Javascript
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
python创建进程fork用法
2015/06/04 Python
python批量制作雷达图的实现方法
2016/07/26 Python
Python Cookie 读取和保存方法
2018/12/28 Python
Python小游戏之300行代码实现俄罗斯方块
2019/01/04 Python
在PYQT5中QscrollArea(滚动条)的使用方法
2019/06/14 Python
Windows下python3安装tkinter的问题及解决方法
2020/01/06 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
环境保护与污染治理求职信
2014/07/16 职场文书
幼儿园家长工作总结2015
2015/04/25 职场文书
贴吧吧主申请感言
2015/08/03 职场文书
创业计划书之家教托管
2019/09/25 职场文书
Go标准容器之Ring的使用说明
2021/05/05 Golang
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python
python flappy bird小游戏分步实现流程
2022/02/15 Python