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一些错误处理的方法与技巧总结
Aug 10 PHP
PHP获取本周第一天和最后一天示例代码
Feb 24 PHP
php导入excel文件到mysql数据库的方法
Jan 14 PHP
php绘制一条弧线的方法
Jan 24 PHP
PHP中开启gzip压缩的2种方法
Jan 31 PHP
php实现多城市切换特效
Aug 09 PHP
php使用curl详细解析及问题汇总
Aug 11 PHP
php 使用fopen函数创建、打开文件详解及实例代码
Sep 24 PHP
CI框架实现框架前后端分离的方法详解
Dec 30 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
Jun 06 PHP
PHP Include文件实例讲解
Feb 15 PHP
yii2.0框架场景的简单使用示例
Jan 25 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
UCenter Home二次开发指南
2009/05/28 PHP
PHP 网页过期时间的控制代码
2009/06/29 PHP
使用PHP curl模拟浏览器抓取网站信息
2013/10/28 PHP
3款值得推荐的微信开发开源框架
2014/10/28 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
2016/03/15 PHP
js去空格技巧分别去字符串前后、左右空格
2013/10/21 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
AngularJS实用开发技巧(推荐)
2016/07/13 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
2017/06/30 Javascript
vue 获取及修改store.js里的公共变量实例
2019/11/06 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
js瀑布流布局的实现
2020/06/28 Javascript
深入了解JavaScript词法作用域
2020/07/29 Javascript
[01:19:46]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第一场 2月28日
2021/03/11 DOTA
Python ValueError: invalid literal for int() with base 10 实用解决方法
2015/06/21 Python
python比较两个列表是否相等的方法
2015/07/28 Python
Python正则表达式使用范例分享
2016/12/04 Python
Python上下文管理器和with块详解
2017/09/09 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
详解Python爬取并下载《电影天堂》3千多部电影
2019/04/26 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
Python爬虫爬取博客实现可视化过程解析
2020/06/29 Python
python 读txt文件,按‘,’分割每行数据操作
2020/07/05 Python
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
Lancome兰蔻官方旗舰店:来自法国的世界知名美妆品牌
2018/06/14 全球购物
中国制造网:Made-in-China.com
2019/10/25 全球购物
护理毕业生自我鉴定
2014/02/11 职场文书
安全施工责任书
2014/08/25 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
务虚会发言材料
2014/12/25 职场文书
村干部任职承诺书
2015/01/21 职场文书
小学记事作文之200字
2019/08/06 职场文书
导游词之藏龙百瀑景区
2019/12/30 职场文书