leetcode-14. 最长公共前缀---pythony(优势体现)

Posted 大聪明Smart

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode-14. 最长公共前缀---pythony(优势体现)相关的知识,希望对你有一定的参考价值。

14. 最长公共前缀

难度简单1800收藏分享切换为英文接收动态反馈

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

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

示例 1:

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

示例 2:

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

提示:

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

    随便找一个字符串(我们取strs[0])作为基准,循环最短字符串的长度数min(len(s) for s in strs)次,每一次比较每个字符传的对应序号字符for alph in strs[1:]:即可。

    class Solution:
        def longestCommonPrefix(self, strs: List[str]) -> str:
            if len(strs) == 1:
                return strs[0]
            first = strs[0]
            num = 0
            count = min(len(s) for s in strs)
            while num < count:
                flag = True
                for alph in strs[1:]:
                    if alph[num] != first[num]:
                        flag = False
                        break
                if flag:
                    num +=1
                else:
                    break
            return first[:num]
    
  2. 字符串比较

    核心思想:所有字符串的最长公共前缀即为这些字符串的最小字符串和最大字符串的最长公共前缀。

    找出min(strs)和max(strs)的公共前缀返回即可。

    class Solution:
        def longestCommonPrefix(self, strs: List[str]) -> str:
            min_str = min(strs)
            max_str = max(strs)
            res = ''
            for i in range(min(len(min_str), len(max_str))):
                if min_str[i] == max_str[i]:
                    res += min_str[i]
                else:
                    break
            return res
    
  3. zip拉链函数

    zip函数

    class zip(object):
        """
        zip(iter1 [,iter2 [...]]) --> zip object
        
        Return a zip object whose .__next__() method returns a tuple where
        the i-th element comes from the i-th iterable argument.  The .__next__()
        method continues until the shortest iterable in the argument sequence
        is exhausted and then it raises StopIteration.
        """
        pass
    

    例如:

    a = list(zip(*['abc', 'def', 'ghijk']))
    print(a)
    [('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]
    
    class Solution:
        def longestCommonPrefix(self, strs: List[str]) -> str:
            strs = [set(tup) for tup in zip(*strs)]
            res = ''
            for str in strs:
                if len(str) == 1:
                    res += str.pop()
                else:
                    break
            return res
    

以上是关于leetcode-14. 最长公共前缀---pythony(优势体现)的主要内容,如果未能解决你的问题,请参考以下文章

python(leetcode)-14最长公共前缀

leetcode14-最长公共前缀

leetcode14-最长公共前缀

LeetCode 14. 最长公共前缀(Longest Common Prefix)

LeetCode14 最长公共前缀

leetcode14. 最长公共前缀 🌟