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+DBM的同学录程序(4)
Oct 09 PHP
轻松修复Discuz!数据库
May 03 PHP
PHP读取MySQL数据代码
Jun 05 PHP
《PHP编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
Nov 01 PHP
php上传文件中文文件名乱码的解决方法
Nov 01 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
Oct 30 PHP
ThinkPHP 404页面的设置方法
Jan 14 PHP
php操作(删除,提取,增加)zip文件方法详解
Mar 12 PHP
ThinkPHP中数据操作案例分析
Sep 27 PHP
PHP错误处理函数
Apr 03 PHP
ThinkPHP5+Layui实现图片上传加预览功能
Aug 17 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
Apr 13 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 字符串压缩方法比较示例
2014/01/23 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
2014/11/12 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
Javascript与vbscript数据共享
2007/01/09 Javascript
JavaScript 常用函数
2009/12/30 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
Nodejs关于gzip/deflate压缩详解
2015/03/04 NodeJs
Nodejs学习笔记之测试驱动
2015/04/16 NodeJs
jQuery原生的动画效果
2015/07/10 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
基于JavaScript实现瀑布流效果
2017/03/29 Javascript
浅谈vue-router2路由参数注意的问题
2017/11/08 Javascript
150行代码带你实现微信小程序中的数据侦听
2019/05/17 Javascript
vue.js购物车添加商品组件的方法
2019/09/17 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
[00:29]2019完美世界全国高校联赛(秋季赛)总决赛海口落幕
2019/12/10 DOTA
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
python smtplib模块自动收发邮件功能(一)
2018/05/22 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
2019/12/26 Python
利用Python如何实时检测自身内存占用
2020/05/09 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
python 匿名函数与三元运算学习笔记
2020/10/23 Python
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
EJB与JAVA BEAN的区别
2016/08/29 面试题
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
工程造价与管理专业应届生求职信
2013/11/23 职场文书
学期研究性学习个人的自我评价
2014/01/09 职场文书
银行员工辞职信范文
2014/01/20 职场文书
学生会个人自荐书范文
2014/02/12 职场文书
服装采购员岗位职责
2014/03/15 职场文书
马云北大演讲完整版:真心话,什么才是阿里的核心竞争力?
2014/04/04 职场文书
小学生节水倡议书
2015/04/29 职场文书
欢迎新生标语2015
2015/07/16 职场文书
房屋买卖定金协议书
2016/03/21 职场文书
vue选项卡切换的实现案例
2022/04/11 Vue.js