【原创】求出数组中单词最长公有前缀
面试题目: 有数组如下,array(china,chinese,children,child,chinajoy,chrome……),求出最长公有前缀,例如这个数组的最长公有前缀为ch,而不是c,请写出对应的执行程序。
解题方案:可以以第一个单词为参照,对后面的单词进行判断【面试题非原创,方案为原创】
$arr = array(‘china’,‘chinese’,‘children’,‘child’,‘chinajoy’,‘chrome’);$total = count($arr); // 总的数量// 求出最大公共前缀,解题思路是可以按照第一个单词来走,不区分大小写$first = $arr[0];// 首先,列出所有公共前缀的可能$poss = array();for($i=1; $i<=strlen($first); $i++){$poss[] = substr($first, 0, $i);}$new = array();// 逐一进行判断foreach($arr as $key=>$val){foreach($poss as $k=>$v){$res = stripos($val, $v);if($res === 0){if(isset($new[$v])){$new[$v] = $new[$v]+1;}else{$new[$v] = 1;}}}}// 去掉非公共的数据foreach($new as $key=>$val){if($val != $total){ // 不等于总的数量,说明就不是公共前缀unset($new[$key]);}}if(count($new) == 1){var_dump(key($new)); // 显示所对应的key值 ch
}else{$last = array_slice($new,count($new)-1,1); // 获取最后一个var_dump(key($last)); // 显示所对应的key值 ch
}