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脚本的10个技巧(6)
Oct 09 PHP
PHP页面间传递参数实例代码
Jun 05 PHP
php array_flip() 删除数组重复元素
Jan 14 PHP
用PHP将数据导入到Foxmail的实现代码
Sep 05 PHP
php中调用其他系统http接口的方法说明
Feb 28 PHP
Mac环境下php操作mysql数据库的方法分享
May 11 PHP
ThinkPHP函数详解之M方法和R方法
Sep 10 PHP
php生成带logo二维码方法小结
Apr 08 PHP
Yii中的relations数据关联查询及统计功能用法详解
Jul 14 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
Dec 25 PHP
thinkPHP事务操作简单案例分析
Oct 17 PHP
PHP使用QR Code生成二维码实例
Jul 07 PHP
PHP实现的折半查找算法示例
Dec 19 #PHP
PHP实现的二分查找算法实例分析
Dec 19 #PHP
PHP实现git部署的方法教程
Dec 19 #PHP
PHP递归实现快速排序的方法示例
Dec 18 #PHP
Laravel框架中自定义模板指令总结
Dec 17 #PHP
PHP结合Vue实现滚动底部加载效果
Dec 17 #PHP
PHP7下协程的实现方法详解
Dec 17 #PHP
You might like
一段防盗连的PHP代码
2006/12/06 PHP
解析phpstorm + xdebug 远程断点调试
2013/06/20 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
判断JavaScript对象是否可用的最正确方法分析
2008/10/03 Javascript
javascript 拖动表格行实现代码
2011/05/05 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
2013/12/25 Javascript
jQuery制作的别致导航有阴影背景高亮模式窗口
2014/04/15 Javascript
使用typeof判断function是否存在于上下文
2014/08/14 Javascript
JS运动基础框架实例分析
2015/03/03 Javascript
JS实现网页表格自动变大缩小的方法
2015/03/09 Javascript
JavaScript事件 &quot;事件对象&quot;的注意要点
2016/01/14 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
2016/12/13 Javascript
详解javascript表单的Ajax提交插件的使用
2016/12/29 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
2017/11/22 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
Vue父子组件之间的通信实例详解
2018/09/28 Javascript
IE11下处理Promise及Vue的单项数据流问题
2019/07/24 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
2019/09/17 Javascript
Python2.7读取PDF文件的方法示例
2017/07/13 Python
Python基于numpy灵活定义神经网络结构的方法
2017/08/19 Python
Python中django学习心得
2017/12/06 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
python网络爬虫 CrawlSpider使用详解
2019/09/27 Python
Pycharm修改python路径过程图解
2020/05/22 Python
SQL数据库笔试题
2016/03/08 面试题
WebSphere面试题:在WebSphere里面如何部署一个应用
2015/08/02 面试题
建议书标准格式
2014/03/12 职场文书
航空学院求职信
2014/06/11 职场文书
我的中国梦演讲稿1000字
2014/08/19 职场文书
2014年财务部工作总结
2014/11/11 职场文书
2015年护士节活动总结
2015/02/10 职场文书
学校后勤工作总结2015
2015/05/15 职场文书
阿里云Nginx配置https实现域名访问项目(图文教程)
2021/03/31 Servers
MySQL Router的安装部署
2021/04/24 MySQL
Python实现PIL图像处理库绘制国际象棋棋盘
2021/07/16 Python