14. 最长公共前缀

题目

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

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

示例 1:

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

示例 2:

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

笔记

`if not x:` 和`if x is None:`的区别

if not strs:
这个条件检查 strs 是否为 False 在布尔上下文中。在 Python 中,空的序列(如空列表、空字符串、空元组等)在布尔上下文中被视为 False。所以,如果 strs 是一个空列表,if not strs 将为真(True)。

if strs is None:
这个条件检查 strs 是否为 None 类型。None 是 Python 中的一个特殊值,用来表示没有值或者空。如果 strs 被赋值为 None,这个条件才会为真。

题解

横向扫描

class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if not strs:
            return ""
        
        prefix,count =strs[0],len(strs)
        for i in range(1,count):
            prefix=self.lcp(prefix,strs[i])
            if not prefix:
                break
        
        return prefix

    def lcp(self,str1,str2):
        length,index=min(len(str1),len(str2)),0
        while index

纵向扫描

class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if not strs:
            return ""
        
        length,count =len(strs[0]),len(strs)
        for i in range(length):
            c=strs[0][i]
            if any(i == len(strs[j]) or strs[j][i] != c for j in range(1, count)):
                return strs[0][:i]
        
        return strs[0]

你可能感兴趣的:(python)