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 相关文章推荐
详细介绍PHP应用提速面面观
Oct 09 PHP
将OICQ数据转成MYSQL数据
Oct 09 PHP
Win2003服务器安全加固设置--进一步提高服务器安全性
May 23 PHP
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
Sep 02 PHP
PHP获取文件后缀名的三个函数
Oct 15 PHP
kohana框架上传文件验证规则写法示例
Jul 14 PHP
PHP类的反射用法实例
Nov 03 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
Jan 04 PHP
Yii使用技巧大汇总
Dec 29 PHP
php实现图片以base64显示的方法
Oct 13 PHP
PDO的安全处理与事物处理方法
Oct 31 PHP
弹出模态框modal的实现方法及实例
Sep 19 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
彻底杜绝PHP的session cookie错误
2009/08/09 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
PHP5权威编程阅读学习笔记 附电子书下载
2012/07/05 PHP
php curl模拟post请求小实例
2013/11/13 PHP
Yii学习总结之安装配置
2015/02/22 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
JSQL  一个 web DB 的封装
2010/05/05 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
2016/08/10 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
servlet+jquery实现文件上传进度条示例代码
2017/01/25 Javascript
ajax接收后台数据在html页面显示
2017/02/19 Javascript
Angular2环境搭建具体操作步骤(推荐)
2017/08/04 Javascript
Angular CLI 安装和使用教程
2017/09/13 Javascript
jQuery实现表单动态添加与删除数据操作示例
2018/07/03 jQuery
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
2019/04/23 Javascript
js Array.slice的8种不同用法示例
2019/07/10 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
JS正则表达式常见函数与用法小结
2020/04/13 Javascript
react 不用插件实现数字滚动的效果示例
2020/04/14 Javascript
JS替换字符串中指定位置的字符(多种方法)
2020/05/28 Javascript
浅谈python为什么不需要三目运算符和switch
2016/06/17 Python
python 接收处理外带的参数方法
2018/12/03 Python
django的ORM操作 增加和查询
2019/07/26 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
HTML5 标准将把互联网视频扔回到黑暗时代
2010/02/10 HTML / CSS
网络技术支持面试题
2013/04/22 面试题
大学生实习期自我评价范文
2013/10/03 职场文书
办理信用卡工作证明
2014/01/11 职场文书
八一演出活动方案
2014/02/03 职场文书
环保宣传标语
2014/06/12 职场文书
小学开学标语
2014/07/01 职场文书
英语投诉信范文
2015/07/03 职场文书
Windows Server 2012 R2服务器安装与配置的完整步骤
2022/07/15 Servers
mysql sock 文件解析及作用讲解
2022/07/15 MySQL