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 相关文章推荐
PHP4与PHP5的时间格式问题
Feb 17 PHP
使ecshop模板中可引用常量的实现方法
Jun 02 PHP
探讨捕获php错误信息方法的详解
Jun 09 PHP
PHP使用Alexa API获取网站的Alexa排名例子
Jun 12 PHP
smarty模板局部缓存方法使用示例
Jun 17 PHP
采用memcache在web集群中实现session的同步会话
Jul 05 PHP
php实现上传图片保存到数据库的方法
Feb 11 PHP
php实现插入数组但不影响原有顺序的方法
Mar 27 PHP
PHP实现基于mysqli的Model基类完整实例
Apr 08 PHP
CI框架中$this-&gt;load-&gt;library()用法分析
May 18 PHP
laravel 解决paginate查询多个字段报错的问题
Oct 22 PHP
PHP论坛实现积分系统的思路代码详解
Jun 01 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/10/09 PHP
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
ThinkPHP CURD方法之where方法详解
2014/06/18 PHP
浅谈PHP中try{}catch{}的使用方法
2016/12/09 PHP
php 算法之实现相对路径的实例
2017/10/17 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
js 获取坐标 通过JS得到当前焦点(鼠标)的坐标属性
2013/01/04 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
2016/02/06 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
javascript 判断当前浏览器版本并判断ie版本
2017/02/17 Javascript
AngularJS监听路由变化的方法
2017/03/07 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
探究一道价值25k的蚂蚁金服异步串行面试题
2020/08/21 Javascript
js实现日历
2020/11/07 Javascript
JavaScript实现通讯录功能
2020/12/27 Javascript
[01:16:16]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第二场 1月8日
2021/03/11 DOTA
python使用递归解决全排列数字示例
2014/02/11 Python
Python下使用Scrapy爬取网页内容的实例
2018/05/21 Python
Python秒算24点实现及原理详解
2019/07/29 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
Python爬虫如何破解JS加密的Cookie
2020/11/19 Python
PyQt5中QSpinBox计数器的实现
2021/01/18 Python
html5自动播放mov格式视频的实例代码
2020/01/14 HTML / CSS
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
美国鲍勃商店:Bob’s Stores
2018/07/22 全球购物
新加坡网上花店:FlowerAdvisor新加坡
2018/10/05 全球购物
消防安全标语
2014/06/07 职场文书
司法局群众路线教育实践活动开展情况总结
2014/10/25 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书
win10下go mod配置方式
2021/04/25 Golang
简单了解 MySQL 中相关的锁
2021/05/25 MySQL
只用Python就可以制作的简单词云
2021/06/07 Python