leetcode_14 最长公共前缀

126 阅读1分钟

要求

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

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

示例 1:

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

示例 2:

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

核心代码

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        return os.path.commonprefix(strs)

另一解法

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if not strs:
            return ""
        min_l = len(strs[0])
        for word in strs:
            min_l = min(min_l,len(word))
        
        common = strs[0][:min_l]
        for index,item in enumerate(strs):
            i = 0
            while i < min_l and item[i] == common[i]:
                i += 1
            min_l = min(min_l,i)
            common = common[:min_l]
        return common

第三种解法

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if not strs:
            return ""
        mins = min(strs)
        maxs  =max(strs)

        for index,item in enumerate(mins):
            if maxs[index] != mins[index]:
                return mins[:index]
        return mins

第四种解法

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if not strs:
            return ""
        strs.sort()
        res = ""

        for x,y in zip(strs[0],strs[-1]):
            if x==y:
                res += x
            else:
                break
        return res

image.png

解题思路:第一种解法:我们使用os库中path.commonprefix获取最长公共前缀,返回list中,所有path共有的最长的路径第二种解法:我们首先先获取到所有单词中最小长度的单词的长度,在拿到第一个单词的该长度的截断的字符串,然后我们遍历我们的词语列表,我们用个计数的方式,来扫描每个单词和最长公共部分的重和的长度,不断的更新长度,扫描一圈,就能得到所有单词的公共长度。第三种解法:字符串可以通过ascii的形式进行比较,所以只要找出最大的字符串和最小的字符串进行比较,就可以找到最长公共前缀。第四种解法:和第三种解法的思路相同,找出最大的字符串和最小的字符串进行比较。