查找字符串数组的公共前缀

17 浏览
0 Comments

查找字符串数组的公共前缀

我有一个像这样的数组:

$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
// 如果你到达这里,那么它们都必须是相同的

问题

  1. 是否有一个内置函数或者更简单的方法来做这个?
  2. 对于我这个有5行的数组,可能还好,但如果我要处理几千行的数组,将会有很多开销,所以我必须对我的起始值$i进行更精确的计算,例如$i等于字符串的中间位置,如果失败,则$i/2,直到成功为止,然后将$i增加1,直到我们成功为止。这样我们可以用最少的比较次数得到一个结果。

是否已经存在这种问题的公式/算法?

0