PHP之找任意两个字符串的最大相同部分

<p style="TEXT-INDENT: 2em">【题目背景】本题的题面是:<strong>输出任意两个字符串的最大相同部分。</strong>比如:字符串abcdsss和字符串sdcdsrf的最大相同部分是cds。 </p><p style="TEXT-INDENT: 2em">【题目解法】穷尽法 </p>

<?php
/**
 * 找两个字符串相同的部分
 **/
function main($str1, $str2) {
	//将字符串转成数组
	$arr1 = str_split($str1);
	$arr2 = str_split($str2);
	//计算字符串的长度
	$len1 = strlen($str1);
	$len2 = strlen($str2);
	//初始化相同字符串的长度
	$len = 0;
	//初始化相同字符串的起始位置
	$pos = -1;
	for ($i = 0; $i < $len1; $i++) {
		for ($j = 0; $j < $len2; $j++) {
			//找到首个相同的字符
			if ($arr1[$i] == $arr2[$j]) {
				//判断后面的字符是否相同
				for ($p = 0; (($i + $p) < $len1) && 
					(($j + $p) < $len2) && 
					($arr1[$i + $p] == $arr2[$j + $p]) && 
					($arr1[$i + $p] <> ''); $p++);
				if ($p > $len) {
					$pos = $i;
					$len = $p;
				}
			}
		}
	} 
	if ($pos == -1) {
		return ;
	} else {
		return substr($str1, $pos, $len);
	}
}
echo main("abcdsss", "sdcdsrf");
?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值