目标
提取字符串的公共前缀
1.公共前缀比所有的字符串都要短,弊端:暂时没想到
public function longestCommonPrefix() { $strs = ["flower","flow","flight"]; if (count($strs) == 0) return''; $string = $strs[0];//公共部分比所有字符串都短,随便取一个字符串,假设该字符串为公共前缀,然后与其他字符串进行比较 foreach ($strs as $k => $v) { if (strlen($v) == 0) return ''; while(substr($v,0,strlen($string)) != $string){ $string = substr($string,0,strlen($string)-1); } } return $string; }
2.数组元素按照字典顺序排序好,数组中间的值就不需要判断,只需要考虑第一个和最后一个
public function longestCommonPrefix1() { $strs = ["flower","flow","flight"]; $max = count($strs); if ($max == 0) return''; sort($strs); $strMin = strlen($strs[0]); if ($strMin==0) return ''; $i = 0; $str = '';//空字符串后续拼接上去 //当第一个元素的某一位和最后一个元素的某一位相同时并且第一个元素的长度大于等于$i时,and条件是因为第一个元素的长度只有那么多,不会存在比$i小的情况,如果存在了那么第一个元素的第i项是不存在的 while($strs[0][$i] == $strs[$max-1][$i] && $strMin>=$i){ $str .= $strs[0][$i]; $i++; } return $str; }