【刷题】最长公共前缀

简介: 【刷题】最长公共前缀

题目描述


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

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


 

示例


示例 1:

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

示例 2:

输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀

 

提示:


1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成

解题思路


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


微信图片_20221112161215.jpg


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


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
}


运行结果


微信图片_20221112161218.jpg


总结


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


原因可能是是使用了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
}


相关文章
|
1月前
|
索引
leetcode647回文子串刷题打卡
leetcode647回文子串刷题打卡
22 0
|
1月前
|
Java
每日一题《剑指offer》字符串篇之替换空格
每日一题《剑指offer》字符串篇之替换空格
39 0
每日一题《剑指offer》字符串篇之替换空格
|
8月前
|
存储
力扣刷题-最长回文子串
力扣刷题-最长回文子串
|
9月前
剑指offer-4.替换空格
剑指offer-4.替换空格
22 0
|
C++
剑指Offer - 面试题5:替换空格
剑指Offer - 面试题5:替换空格
55 0
|
存储 C++
剑指offer 04. 替换空格
剑指offer 04. 替换空格
53 0
反转字符串II(力扣刷题)
反转字符串II(力扣刷题)
|
算法 Java C++
反转字符串(力扣刷题)
反转字符串(力扣刷题)
|
Java C++
代码随想录刷题|LeetCode 344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.反转字符串里的单词 剑指Offer58-II.左旋转字符串
代码随想录刷题|LeetCode 344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.反转字符串里的单词 剑指Offer58-II.左旋转字符串
代码随想录刷题|LeetCode 344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.反转字符串里的单词 剑指Offer58-II.左旋转字符串
|
算法 Java C++
替换空格(剑指offer 05)
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。