leetcode:最长公共前缀

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

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

示例 1:

输入: [“flower”,“flow”,“flight”]
输出: “fl”

示例 2:

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

说明:
所有输入只包含小写字母 a-z 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

暴力法:

每次比较第i个字符串和第i+1个字符串,求得这两个最长公共前缀。
如果存在,则记录当前前缀,然后此前缀与i+2个字符串比较……
如果不存在,则返回没有公共前缀,随意两个字符串没有,则即可判定没有最长公共前缀。

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> 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 < length and str1[index] == str2[index]:
            index += 1
        return str1[:index]

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/longest-common-prefix/solution/zui-chang-gong-gong-qian-zhui-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

zip函数法:

class Solution(object):
    def longestCommonPrefix(self, strs):
        ans = ''
        for i in zip(*strs):
            if len(set(i)) == 1:
                ans += i[0]
            else:
                break
        return ans

作者:javaniuniu
链接:https://leetcode-cn.com/problems/longest-common-prefix/solution/shi-yong-zip-ji-xing-dai-ma-jian-dan-gao-ding-pyth/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

zip是将每个字符串的每个字符拆分出来,然后用set集合去重,留下来的即为所得
aa=[“flower”,“flow”,“flight”]
leetcode:最长公共前缀_第1张图片

排序法:

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if strs==[]:
            return ""
        new_strs=sorted(strs)
        first=new_strs[0]
        last=new_strs[-1]
        s=''
        for i,j in zip(first,last):
            if i==j:
                s+=i
            else:
                return s
        return s

先将字符数组进行排序,排序后的字符数组,取其第0个字符串与最后一个字符串的最长公共前缀,即为该字符串数组的公共前缀(这里排序是按首字母排序,如果不排序,可能某一个没有公共前缀的字符串在数组中间……如果没有则必然在最()前后面)
leetcode:最长公共前缀_第2张图片
leetcode:最长公共前缀_第3张图片

leetcode:最长公共前缀_第4张图片

你可能感兴趣的:(数据结构,leetcode)