查找字符串数组的公共前缀
查找字符串数组的公共前缀
我有一个像这样的数组:
$sports = array( 'Softball - Counties', 'Softball - Eastern', 'Softball - North Harbour', 'Softball - South', 'Softball - Western' );
我想找到这个字符串的最长公共前缀。在这个例子中,它将是'Softball - '
我认为我会按照以下步骤进行:
$i = 1; // 循环到第一个字符串的长度 while ($i < strlen($sports[0]) { // 获取长度为i的左侧部分 $match = substr($sports[0], 0, $i); // 遍历数组中的所有值,并比较它们是否匹配 foreach ($sports as $sport) { if ($match != substr($sport, 0, $i) { // 不匹配,返回匹配的部分 return substr($sport, 0, $i-1); } } // foreach // 增加字符串长度 $i++; } // while // 如果你到达这里,那么它们都必须是相同的
问题
- 是否有一个内置函数或者更简单的方法来做这个?
- 对于我这个有5行的数组,可能还好,但如果我要处理几千行的数组,将会有很多开销,所以我必须对我的起始值
$i
进行更精确的计算,例如$i
等于字符串的中间位置,如果失败,则$i/2
,直到成功为止,然后将$i
增加1,直到我们成功为止。这样我们可以用最少的比较次数得到一个结果。
是否已经存在这种问题的公式/算法?