Skip to content

【刷题】最长公共前缀

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

春招打卡第13天第16篇。

勤学似春起之苗,不见其增,日有所长;辍学如磨刀之石,不见其损,日有所亏。

掘金的活动真多哇,这个月决定每天用go刷题,一方面提升一下算法水平,另一方面沉淀一下go语言的学习。

Let's GO!

题目描述

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""。

示例

示例 1:

输入:strs = ["flower","flow","flight"]

输出:"fl"

示例 2:

输入:strs = ["dog","racecar","car"]

输出:""

解释:输入不存在公共前缀。

提示:

1 <= strs.length <= 200

0 <= strs[i].length <= 200

strs[i] 仅由小写英文字母组成

解题思路

  1. 这道题还是比较简单的,做完题之后我刷了力扣的题解,官方给出了4种解题方案。(刷了这么久,才发现题解这个东西.... 不知道题解的小伙伴可以看这里)

image.png

  1. 我的代码和题解中给出的都不一样,但是思路和官方给出的纵向扫描是一致的。
  2. 我们使用双重for循环,扫描给定的数组,strings.HasPrefix作用就是判断是否以指定的前缀开头。在循环过程中我们一直遍历获得最大的公共前缀。
  3. 注意:一定要做为空判断,我们在编程的时候也要注意这个问题,这几次刷题我总是忘了这个,导致通过率有问题。

AC代码

go
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 }

运行结果

image.png

总结

运行结果的数据刚刚的,我跑了一下题解中的答案,没有我这种解法效率高。

原因可能是是使用了go提供的方法strings.HasPrefix

我查了一下实现源码:

go
// 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 }

来源说明

来源:力扣(LeetCode)

链接:leetcode-cn.com/problems/lo…

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

最后

感谢阅读,欢迎大家三连:点赞、收藏、投币(关注)!!!

8e95dac1fd0b2b1ff51c08757667c47a.gif

🚀 学习遇到瓶颈?想进大厂?

看完这篇技术文章,如果还是觉得不够系统,或者想在实战中快速提升?
王中阳的就业陪跑训练营,提供定制化学习路线 + 企业级实战项目 + 简历优化 + 模拟面试。

了解训练营详情