PHP实现求解最长公共子串问题的方法


Posted in PHP onNovember 17, 2017

本文实例讲述了PHP实现求解最长公共子串问题的方法。分享给大家供大家参考,具体如下:

题目:如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串。

注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中。即,可以不连续,但顺序不能变。

请编写一个函数,输入两个字符串,求它们的最长公共子串,并打印出一个最长公共子串。

例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它们的最长公共子串,

下面的算法是根据网上的java算法由酒逍遥 翻译过来的

已经经过修正

LCS经典算法php版本

<?php
class LCS{
  public static function main(){
    //设置字符串长度
    $substringLength1 = 20;
    $substringLength2 = 20; //具体大小可自行设置
    $opt=array_fill(0,21,array_fill(0,21,null));
    // 随机生成字符串
    $x = self::GetRandomStrings($substringLength1);
    $y = self::GetRandomStrings($substringLength2);
    $startTime = microtime(true);
    // 动态规划计算所有子问题
    for ($i = $substringLength1 - 1; $i >= 0; $i--){
      for ($j = $substringLength2 - 1; $j >= 0; $j--){
        if ($x[$i] == $y[$j])
          $opt[$i][$j] = $opt[$i + 1][$j + 1] + 1;
        else
          $opt[$i][$j] = max($opt[$i + 1][$j], $opt[$i][$j + 1]);
      }
    }
    echo "substring1:".$x."\r\n";
    echo "substring2:".$y."\r\n";
    echo "LCS:";
    $i = 0;
    $j = 0;
    while ($i < $substringLength1 && $j < $substringLength2){
      if ($x[$i] == $y[$j]){
        echo $x[$i];
        $i++;
        $j++;
      } else if ($opt[$i + 1][$j] >= $opt[$i][$j + 1])
        $i++;
      else
        $j++;
    }
    $endTime = microtime(true);
    echo "\r\n";
    echo "Totle time is " . ($endTime - $startTime) . " s";
  }
  public static function GetRandomStrings($length){
    $buffer = "abcdefghijklmnopqrstuvwxyz";
    $str="";
    for($i=0;$i<$length;$i++){
      $random=rand(0,strlen($buffer)-1);
      $str.=$buffer[$random];
    }
    return $str;
  }
}
LCS::main();
?>

运行结果:

substring1:cgqtdaacneftabsxvmlb
substring2:suwjwwakzzhghbsmnksg
LCS:absm
Totle time is 0.000648975372314 s

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
提取HTML标签
Oct 09 PHP
PHP下10件你也许并不了解的事情
Sep 11 PHP
基于php冒泡排序算法的深入理解
Jun 09 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
Jun 26 PHP
php读取文件内容的三种可行方法示例介绍
Feb 08 PHP
IIS6.0 开启Gzip方法及PHP Gzip函数分享
Jun 08 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
Dec 22 PHP
PHP创建PowerPoint2007文档的方法
Dec 10 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
Dec 29 PHP
PHP智能识别收货地址信息实例
Jan 05 PHP
laravel框架select2多选插件初始化默认选中项操作示例
Feb 18 PHP
php实现通过stomp协议连接ActiveMQ操作示例
Feb 23 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 #PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
Nov 17 #PHP
关于php支持的协议与封装协议总结(推荐)
Nov 17 #PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
Nov 16 #PHP
PHP实现链式操作的三种方法详解
Nov 16 #PHP
thinkphp5.0自定义验证规则使用方法
Nov 16 #PHP
PHP实现验证码校验功能
Nov 16 #PHP
You might like
Windows7下的php环境配置教程
2015/02/28 PHP
PHP处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
2019/10/30 PHP
关于文本限制字数的js代码
2007/04/02 Javascript
来自chinaz的ajax获取评论代码
2008/05/03 Javascript
jQuery 加上最后自己的验证
2009/11/04 Javascript
详解基于angular-cli配置代理解决跨域请求问题
2017/07/05 Javascript
angular实现spa单页面应用实例
2017/07/10 Javascript
jquery一键控制checkbox全选、反选或全不选
2017/10/16 jQuery
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
解决 window.onload 被覆盖的问题方法
2020/01/14 Javascript
[05:22]DOTA2 2015国际邀请赛中国区预选赛首日TOP10
2015/05/26 DOTA
python定时执行指定函数的方法
2015/05/27 Python
Python语言描述最大连续子序列和
2017/12/05 Python
Python判断文件和字符串编码类型的实例
2017/12/21 Python
python并发和异步编程实例
2018/11/15 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
基于Python和PyYAML读取yaml配置文件数据
2020/01/13 Python
appium+python adb常用命令分享
2020/03/06 Python
tensorflow之读取jpg图像长和宽实例
2020/06/18 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
详解CSS3:overflow属性
2020/11/17 HTML / CSS
美国复古街头服饰精品店:Need Supply Co.
2017/02/22 全球购物
Ajax的工作原理
2015/12/04 面试题
计算机应用专业应届毕业生中文求职信范文
2013/11/29 职场文书
软件部经理岗位职责范本
2014/02/25 职场文书
个人贷款担保书
2014/04/01 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
企业战略合作意向书
2015/05/08 职场文书
宣传部部长竞选稿
2015/11/21 职场文书
2016教师廉洁从教心得体会
2016/01/13 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers
html中显示特殊符号(附带特殊字符对应表)
2021/06/21 HTML / CSS
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python