php两个字符串公共,PHP查找多个字符串的公共前缀【案例】

本篇和大家分享一个小算法的应用——查找字符串数组的公共前缀:

array(

‘abcdefg’,

‘abcdfio’,

‘abcdqle’

)

上面的数组字符串中,公共前缀为’abcd’。

首先想到的是从第一个字符串的第一个字符开始,依次与其它字符串的字符比较,都相等的我们将其保存起来,直到有一个不相等就结束后续的比较。

代码如下

function commonPrefix($arr){

$count = strlen($arr[0]);

$prefix = '';

for($i=0;$i

$char = $arr[0][$i];

$flag = true;

foreach($arr as $val){

if($char != $val[$i]){

$flag = false;

break;

}

}

if(!$flag) break;

$prefix .= $char;

}

return $prefix;

}

这段代码能很好的找出上面字符串数组的公共前缀。

但是上面那段程序存在一个比较严重的bug。当数组中有的字符串的长度比第一个字符串的长度小的时候就有可能出现错误。我们看下面的数组:

array(

'abcde',

'abc',

'abcrhgh',

'abcdfg',

'abcfg'

);

我们看上面的数组知道,公共前缀为abc。在程序进行对比的过程中,当比较第四个字符d的时候,我们看第二个字符串是不是只有三个字符。因此$arr[1][3]没有这个变量。因此会报错。

针对这种情况有两种解决方法

方法一、每次进行对比之前判断变量是否存在,如果不存在的话直接结束后续的比较。

部分代码如下:

foreach($arr as $val){

if(!isset($val[$i]){

$flag = false;

break;

}

if($char != $val[$i]){

$flag = false;

break;

}

}

方法二、在进行查找对比之前,先找出数组中最短字符串的长度。以此长度作为循环的终止条件。

代码如下:

function commonPrefix($arr){

$count = strlen($arr[0]);

for($i = 0;$i

if(strlen($arr[$i]) <= $count){

$count = strlen($arr[$i]);

}

}

$prefix = '';

for($i=0;$i

$char = $arr[0][$i];

$flag = true;

foreach($arr as $val){

if($char != $val[$i]){

$flag = false;

break;

}

}

if(!$flag) break;

$prefix .= $char;

}

return $prefix;

}

以上就是整个查找字符串数组中公共前缀的代码。希望对大家有所帮助。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值