字符串篇 - leetcode 14.最长公共前缀(easy)

1. 题目描述

跳转至 leetcode 作答界面

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

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

示例 1:

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

示例 2:

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

提示:

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

函数签名:

 def longestCommonPrefix(self, strs: List[str]) -> str:

2.思路/题解

  • 如果字符串数组的长度为1,那直接返回这个数组第一个仅有的字符串即可
  • 如果字符串数组的长度超过1,总是以第一个字符串作为参考物,然后重复下面的操作

​​​​遍历第 2 ~ 最后一个字符串,将每个字符串第 k 个位置都与第一个字符串的第 k 个位置做一次比较:

  • 一旦发现不相同,或者第 k 个位置已经超出两个正在比较的字符串的索引边界了,就直接返回现有的结果
  • 如一轮遍历下来,发现大家在第 k 个字符上都相同,就将这第 k 个字符加入结果集,然后将 k += 1,继续下一轮 「第 2 ~ 最后一个」字符串的遍历,重复以上步骤

3. 具体代码

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        n = len(strs)
        if n == 1:
            return strs[0]

        res = []
        k,i = 0,1
        while True:
            while i <= n-1:
                if k >= len(strs[0]) or k >= len(strs[i]) or strs[i][k] != strs[0][k]:
                    return "".join(res)
                i += 1
            res.append(strs[0][k])
            k += 1 
            i = 0
            

4.一个有意思的解答

利用 Python 特性,取每一个单词的同一位置的字母,看是否相同。

class Solution:
    def longestCommonPrefix(self, strs):
        res = ""
        for tmp in zip(*strs):
            tmp_set = set(tmp)  # 在 Python 中,集合中的元素是不允许重复的
            if len(tmp_set) == 1:
                res += tmp[0]
            else:
                break
        return res

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值