leetcode 14最长公共前缀

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

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

示例 1:

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

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

这道题看着很简单,只要将列表前两个元素进行对比,找出他们的公共子串,然后拿他们的公共子串和之后的元素进行对比,由于子串的长度不大,所以只需遍历O(n*k)(最差情况)就可以了。但是题目的数据里有很多坑,容易考虑不到,比如传入列表元素为空,传入列表元素只有一个这些,导致我WA了好几发才过的题,代码如下

# 已经战胜 42.80 % 的 python 提交记录
# 输入: ["flower","flow","flight"]
# 输出: "fl"
class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        ans = ""
        strs_lens = len(strs)
        if strs_lens == 0:
            return ""
        if strs_lens == 1:
            return strs[0]
        else:
            for i in range(min(len(strs[0]),len(strs[1]))):
                if strs[0][i] == strs[1][i]:
                    ans += strs[0][i]
                else:
                    break
            #到这里就求出了前两位的公共字串
            for i in range(2, strs_lens):
                if len(strs[i]) == 0:
                    return ""
                lensx = min(len(ans),len(strs[i]))
                for j in range(lensx):
                    if strs[i][j] == ans[j]:
                        if lensx < len(ans):
                            ans = ans[:lensx]
                        continue
                    else:
                        ans = ans[:j]
                        break
        if ans == "":
            return ""
        else:
            return ans
s = Solution()
ans = s.longestCommonPrefix(["flower","flow","flight"])
print(ans)
原文地址:https://www.cnblogs.com/yfc0818/p/11072640.html