2018-06-14 LeetCode14

2018-06-14  本文已影响0人  Betrayer丶

题目描述

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。
示例 1:

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

示例 2:

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

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

我的解法

首先判断字符串数组是否为空,然后选择最短的字符串长度作为外层循环,选择字符串个数作为内层循环,再进行依次比较。

class Solution:
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if len(strs) == 0:
            return ""
        length=len(strs[0])
        prefix=""
        # Search the shortest str
        for item in strs:
            if len(item) < length:
                length=len(item)
        # Find the longest prefix
        for i in range(length):
            pre=strs[0][i]
            for item in strs:
                if item[i] != pre:
                    return prefix
            prefix=prefix+pre
        return prefix

最优解法

关键点:使用sort()函数,只比较第一个和最后一个字符串的公共开头子串,减少了比较的次数。

class Solution:
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        # 排序后比较首尾两个就好
        if len(strs) == 0:
            return ""
        strs.sort()
        result = ""
        for i in range(len(strs[0])):
            if strs[0][i] != strs[-1][i]:
                return result
            result += strs[0][i]
        return result
上一篇下一篇

猜你喜欢

热点阅读