每日一题——最长公共前缀
题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例
1 2 3 4 5 6
| 输入: ["flower","flow","flight"] 输出: "fl"
输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。
|
说明:
所有输入只包含小写字母 a-z
。
思路
- 因为要找最长 “公共” 前缀,那么意味着我们可以任一一个元素找到
- 通过任一元素建立 “基准” 元素,不断更新比较,即可正确求解
- 最后处理下边界条件即可
代码
PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
function longestCommonPrefix($strs) { foreach ($strs as $ke=>$value) { if ($value == '') { return ''; } } if (count($strs)==1){ return $strs[0]; } $len = strlen($strs[0]); $i = 0; while ($i<=$len) { $str = substr($strs[0],$i,1); for ($j = 1; $j < count($strs); $j++) { if ($str != substr($strs[$j],$i,1) or $i==$len) { return substr($strs[0],0,$i); } } $i++; } return ''; }
|
Golang
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| func longestCommonPrefix(strs []string) string { if len(strs) < 1 { return "" } prefix := strs[0] for _,str := range strs { for strings.Index(str,prefix) != 0 { if len(prefix) == 0 { return "" } prefix = prefix[:len(prefix) - 1] } } return prefix }
|