php 最长公共子串,PHP实现求解最长公共子串思路方法
本文实例讲述了PHP实现求解最长公共子串问题的方法。分享给大家供大家参考,具体如下:
题目:如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串。
注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中。即,可以不连续,但顺序不能变。
请编写一个函数,输入两个字符串,求它们的最长公共子串,并打印出一个最长公共子串。
例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它们的最长公共子串,
下面的算法是根据网上的java算法由酒逍遥 翻译过来的
已经经过修正
LCS经典算法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
$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实现求解最长公共子串思路方法相关推荐
- python求解最长前缀公共子串
题目描述 编写一个函数来查找字符串数组中的最长公共前缀.如果不存在公共前缀,返回空字符串 "". LeetCode原题地址:https://leetcode-cn.com/prob ...
- 求解最长单调递增子串
求解最长递增子串可分为两种情况,即子串连续或非连续. 例如,对于整数串{1,3,5,1,-1,4,5,3,1,8,3,4,6,2,4,6,7,8,6,4} 其连续递增子串为{2,4,6,7,8},非连 ...
- 求解最长回文子串----Manacher 算法
最长回文子串问题:给定一个字符串,求它的最长回文子串长度. 如果一个字符串正着读和反着读是一样的,那么我们称之为回文串.例如:abba.aaaa.abvcba.123321等 暴力法:遍历字符串的所有 ...
- 最长公共前缀 python_python 实现求解字符串集的最长公共前缀方法
问题比较简单,给定一个字符串集合求解其中最长的公共前缀即可,这样的问题有点类似于最长公共子序列的问题,但是比求解最长最长公共子序列简单很多,因为是公共前缀,这样的话只需要挨个遍历即可,只要遍历长度结束 ...
- KMP算法及next数组(最大公共前后缀)求解
KMP算法及next数组(最大公共前后缀)求解 2020.12.14理解: 1. KMP算法 网上关于KMP算法讲解较为简单易懂,因此在此只作简述: 在字符串s中匹配字符串t: S: ABE-AB-A ...
- python求字符串中出现的第一个最长重复子串(如banana中最长重复子串为ana)
#字符串中出现的第一个最长重复子串 class commonsubstring():def maxlen(self,s1,s2): #最长公共子串的长度for i in range(min(len(s ...
- 字符串中连续出现最多的子串 amp; 字符串中最长反复子串
字符串中连续出现最多的子串 & 字符串中最长反复子串 字符串中连续出现最多的子串 & 字符串中最长反复子串,这两个问题都能够用后缀数组来表示,至于后缀数组能够參考编程珠玑P156:后缀 ...
- java最长公共子序列_技术分享 | 最长公共子序列在比对工具的应用
即使如何1 在实际工作中,我们常常要对输出的文本和数据进行比对:以取证大师为例,取证大师导出的取证结果数据量很容易达到上万条.这类数据特点除了数量级大外,其实数据结构很相近.即使我们以无以伦比的细致和 ...
- 使用有限差分法求解无限长直的金属槽内的电位分布
使用有限差分法求解无限长直的金属槽内的电位分布 实验内容: 实验源码: 实验截图 实验内容: 使用有限差分法求解无限长直的金属槽内的电位分布 实验源码: %控制宽度 Length = 50; %长度 ...
最新文章
- 看看 Grunt 的源码(一):grunt-cli 源码解析
- altium designer怎么在原理图中批量修改元件封装
- 皮一皮:这小伙子怎么能掌握这么多高深技术!!!
- python经典好书-python经典书籍推荐
- ASP.NET MVC实现一个用户只能登录一次 单用户登录
- 关于用户升级到MacOS10.10系统后versions崩溃的问题
- python第三方库安装-多种方式
- java通过反射获取类名、属性名称以及@Table注解上的表名称
- Exception in thread main org.apache.thrift.transport.TTransportException: Could not create ServerS
- 用ASP.NETCore构建可检测的高可用服务
- .NET World——gPRC概览
- C#LeetCode刷题-双指针
- “壕”无人性!黄金版iPhone 13 Pro售价27万元起
- 通俗易懂!视觉slam第八部分——李群,李代数
- [荐] 微信小程序模板源码合集
- 二扩域元素与整数的转换
- Android Studio 单独启动安卓模拟器教程
- 2015年度APP分类
- 所有大学都教Java,培训班也输出了大量Java程序员,为什么社会上的Java程序员还没有饱和?
- 易语言 多线程,等待所有线程执行完毕后操作
热门文章
- 【Elasticsearch】index [index] blocked by: [TOO_MANY_REQUESTS/12/index read-only / allow delete (api)]
- 【Flink】Flink Invalid timestamp -1 Timestamp should always be none-negative or null
- 【MySQL】MySQL监控工具 mysql-monitor
- 【Hadoop】the short-cricuit local reads feature cannnot be use because UNIX Domain sockets are not ava
- Spark: history Server
- qemu debug linux内核,在QEMU环境中使用GDB调试Linux内核
- 【linux系统编程】linux用户及权限管理
- 复盘SpringBoot中定时任务和异步线程池
- (很全面)SpringBoot 使用 Caffeine 本地缓存
- 代码生成利器:IDEA 强大的 Live Templates