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语法(2)
Oct 09 PHP
php sprintf()函数让你的sql操作更安全
Jul 23 PHP
php 记录进行累加并显示总时长为秒的结果
Nov 04 PHP
基于PHP Web开发MVC框架的Smarty使用说明
Apr 19 PHP
PHP图片处理之图片旋转和图片翻转实例
Nov 19 PHP
PHP清除字符串中所有无用标签的方法
Dec 01 PHP
Smarty最简单实现列表奇偶变色的方法
Jul 01 PHP
WordPress网站性能优化指南
Nov 18 PHP
PHP快速生成各种信息提示框的方法
Feb 03 PHP
Symfony生成二维码的方法
Feb 04 PHP
centos 7.2下搭建LNMP环境教程
Nov 20 PHP
django中的ajax组件教程详解
Oct 18 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
Mysql的常用命令
2006/10/09 PHP
php 用sock技术发送邮件的函数
2007/07/21 PHP
Chrome Web App开发小结
2014/09/04 PHP
js 图片缩放(按比例)控制代码
2009/05/27 Javascript
JavaScript初学者需要了解10个小技巧
2010/08/25 Javascript
基于jQuery中对数组进行操作的方法
2013/04/16 Javascript
js几秒以后倒计时跳转示例
2013/12/26 Javascript
Asp.Net alert弹出提示信息的几种方法总结
2014/01/29 Javascript
jQuery获取和设置表单元素的方法
2014/02/14 Javascript
jQuery中选择器小问题(新人难免遇到)
2014/03/31 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
JS实现可关闭的对联广告效果代码
2015/09/14 Javascript
jQuery简单验证上传文件大小及类型的方法
2016/06/02 Javascript
微信小程序去哪里找 小程序到底如何使用(附小程序名单)
2017/01/09 Javascript
浅谈在koa2中实现页面渲染的全局数据
2017/10/09 Javascript
vue数据控制视图源码解析
2018/03/28 Javascript
jquery+php后台实现省市区联动功能示例
2019/05/23 jQuery
vscode 调试 node.js的方法步骤
2020/09/15 Javascript
javascript使用正则表达式实现注册登入校验
2020/09/23 Javascript
[01:05:36]VP vs TNC Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
python 遍历字符串(含汉字)实例详解
2017/04/04 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
django修改models重建数据库的操作
2020/03/31 Python
Python 解析简单的XML数据
2020/07/24 Python
Sephora丝芙兰印尼官方网站:购买化妆品和护肤品
2018/07/02 全球购物
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
写给女朋友的道歉信
2014/01/08 职场文书
小学生手册家长评语
2014/04/16 职场文书
客户经理竞聘演讲稿
2014/05/15 职场文书
房屋买卖协议书范本
2014/09/27 职场文书
群众路线教育实践活动学习心得体会
2014/10/30 职场文书
公司员工培训管理制度
2015/08/04 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书
技术入股协议书
2016/03/22 职场文书
详解Java实践之抽象工厂模式
2021/06/18 Java/Android