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 相关文章推荐
第十三节 对象串行化 [13]
Oct 09 PHP
header()函数使用说明
Nov 23 PHP
一步一步学习PHP(8) php 数组
Mar 05 PHP
php购物车实现代码
Oct 10 PHP
IIS安装Apache伪静态插件的具体操作图文
Jul 01 PHP
ThinkPHP分页类使用详解
Mar 05 PHP
PHP中is_dir()函数使用指南
May 08 PHP
Yii配置与使用memcached缓存的方法
Jul 13 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
Nov 25 PHP
PHP培训要多少钱
Jun 06 PHP
Laravel学习教程之IOC容器的介绍与用例
Aug 15 PHP
PHP使用PDO操作sqlite数据库应用案例
Mar 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 has encountered an Access Violation at 7C94BD02解决方法
2009/08/24 PHP
php操作mysql数据库的基本类代码
2014/02/25 PHP
PHP截取指定图片大小的方法
2014/12/10 PHP
php curl登陆qq后获取用户信息时证书错误
2015/02/03 PHP
PHP类型约束用法示例
2016/09/28 PHP
Extjs中ComboBoxTree实现的下拉框树效果(自写)
2013/05/28 Javascript
高效率JavaScript编写技巧整理
2013/08/23 Javascript
JavaScript错误处理
2015/02/03 Javascript
JS实现点击按钮自动增加一个单元格的方法
2015/03/09 Javascript
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
Bootstrap每天必学之导航
2015/11/26 Javascript
JavaScript对象参数的引用传递
2016/01/14 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
17道题让你彻底理解JS中的类型转换
2019/08/08 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
2019/09/26 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
[01:44]剑指西雅图 展望TI之CIS战队专访
2014/06/25 DOTA
python使用scrapy解析js示例
2014/01/23 Python
Python内建数据结构详解
2016/02/03 Python
Pycharm编辑器技巧之自动导入模块详解
2017/07/18 Python
Python实现多进程的四种方式
2019/02/22 Python
python变量的存储原理详解
2019/07/10 Python
Python基础之函数基本用法与进阶详解
2020/01/02 Python
如何在sublime编辑器中安装python
2020/05/20 Python
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
《雷雨》教学反思
2014/02/20 职场文书
售后服务承诺书
2014/03/26 职场文书
保研推荐信
2014/05/09 职场文书
工厂标语大全
2014/10/06 职场文书
干部年终考核评语
2015/01/04 职场文书
2015年电厂工作总结范文
2015/05/13 职场文书
2015年企业员工工作总结范文
2015/05/21 职场文书
悬崖上的金鱼姬观后感
2015/06/15 职场文书
2016年6.5世界环境日宣传活动总结
2016/04/01 职场文书
何时使用Map来代替普通的JS对象
2021/04/29 Javascript
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android