题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例
示例 1:
输入:strs = ["flower","flow","flight"] 输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀
提示:
1 <= strs.length <= 200 0 <= strs[i].length <= 200 strs[i] 仅由小写英文字母组成
解题思路
- 这道题还是比较简单的,做完题之后我刷了力扣的题解,官方给出了4种解题方案。(刷了这么久,才发现题解这个东西.... 不知道题解的小伙伴可以看这里)
- 我的代码和题解中给出的都不一样,但是思路和官方给出的
纵向扫描
是一致的。 - 我们使用双重for循环,扫描给定的数组,
strings.HasPrefix
作用就是判断是否以指定的前缀开头。在循环过程中我们一直遍历获得最大的公共前缀。 - 注意:一定要做为空判断,我们在编程的时候也要注意这个问题,这几次刷题我总是忘了这个,导致通过率有问题。
AC代码
func longestCommonPrefix(strs []string) string { if len(strs) == 0{ return "" } prefix := strs[0] for i := 1; i < len(strs); i++ { for !strings.HasPrefix(strs[i], prefix) { prefix = strs[0][0 : len(prefix)-1] if prefix == "" { return "" } } } return prefix }
运行结果
总结
运行结果的数据刚刚的,我跑了一下题解中的答案,没有我这种解法效率高。
原因可能是是使用了go提供的方法strings.HasPrefix
我查了一下实现源码:
// HasPrefix tests whether the string s begins with prefix. func HasPrefix(s, prefix string) bool { return len(s) >= len(prefix) && s[0:len(prefix)] == prefix }