LeetCode(#14) 最长公共前缀(python)

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

示例 1:

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

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

所有输入只包含小写字母 a-z

方法一:
灵活运用zip(*)和set()

strs=["123","flow","flight"]
zipped=zip(*strs)
print(list(zipped))

输出:

[('1', 'f', 'f'), ('2', 'l', 'l'), ('3', 'o', 'i')]

正确解法如下:

def longestCommonPrefix(strs):
    res=""
    zipped=zip(*strs)
    for tmp in zipped:
        tmp_set=set(tmp)
        if len(tmp_set)==1:
            #res+=list(tmp_set)[0]#set中是{}
            res+=tmp[0]
        else:#注意一旦不等于1就要break
            break
    return res

strs=list(x for x in input().split())
print(longestCommonPrefix(strs))

方法二
取一个单词 s,和后面单词比较,看 s 与每个单词相同的最长前缀是多少!遍历所有单词

Python find() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。
前面的字符串大,()里的是子字符串

class Solution(object):
    def longestCommonPrefix(self, strs):
        if not s:
            return ""
        res=s[0]
        for i in range(1,len(strs)):
            while s[i].find(res)!=0:
                res=res[0:len(res)-1]
        return res


if __name__=="__main__":
    s =list( x for x in input().split())
    lcy=Solution()
    print(lcy.longestCommonPrefix(s))

方法三
按字典排序数组,比较第一个,和最后一个单词,有多少前缀相同。

class Solution:
    def longestCommonPrefix(self, s: List[str]) -> str:
        if not s:
            return ""
        s.sort()
        n = len(s)
        a = s[0]
        b = s[n-1]
        res = ""
        for i in range(len(a)):
            if i < len(b) and a[i] == b[i]:
                res += a[i]
            else:
                break
        return res

你可能感兴趣的:(leetcode,python)