014- Longest Common Prefix

2019-04-12  本文已影响0人  英武

Longest Common Prefix

Write a function to find the longest common prefix string amongst an array of strings.

使用最挫的算法,挨个遍历,居然也能过:

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

参考网页,还有两个算法,一个是先排序:

class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if not strs:
            return ''
        strs.sort()
        res = ''
        for i in range(len(strs[0])):
            if i >= len(strs[-1]) or strs[-1][i] != strs[0][i]:
                return res
            res += strs[0][i]
        return res

还有一个是使用zip方法,非常简练, 能超过100%的人:

class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if not strs:
            return ''
        for i, chars in enumerate(zip(*strs)):
            if len(set(chars)) > 1:
                return strs[0][:i]
        return min(strs)

最终结果还是比较有趣的,先排序的时间居然最少。

再来一个时间最少的:

class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if not strs:
            return ""
        res = 0
        for chars in zip(*strs):
            if len(set(chars)) > 1:
                return strs[0][:res]
            res += 1
        return min(strs)

注意这里的 zip(*strs)的做法,可以通过这样的方式求转置。

还有一个先找到最短长度的方法:

class Solution:
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if not strs:
            return ''
        shortest = min(strs, key=len)
        for i, v in enumerate(shortest):
            for s in strs:
                if s[i] != v:
                    return s[:i]
        return shortest
上一篇下一篇

猜你喜欢

热点阅读