10.最长公共前缀-Leetcode 014(python)

  • 题目描述

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

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

  • 示例

示例 1:

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

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

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


  • 解决方案一

首先找出字符串数组中最短的字符串长度minl,这也是最长公共前缀可以取到的最大值;然后开始依次遍历字符串数组,判断每一个字符串的前minl个字符是否一样,思路是从下标0开始,如果前边的字符不一样,那么后边的字符也就不用再判断了。

  • 代码一
class Solution:
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        
        if  not strs:
            return ""
        
        if len(strs) == 1:
            return strs[0]    
        #找出最短的字符串长度minl
        minl = min([len(x) for x in strs])
        
        #遍历每一个字符串的前min1个字符
        end = 0
        while end < minl:
            for i in range(1,len(strs)):
                #如果当前字符串的第end个字符和它前一个字符串的第end个字符不一样,那么就不再进行后边的判断,最长公共前缀的长度为end
                if strs[i][end] != strs[i-1][end]:
                    return strs[0][:end]
            end += 1
        return strs[0][:end]
  • 解决方案二

字符串比较大小值时是按照ACII码来排序的,比如min(['a', 'abc', 'ae'])为'a',max(['a', 'abc', 'ae'])为'ae'所以只需比较字符串数组中的最大值和最小值即可。

  • 代码二
class Solution:
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        
   # 如果strs为空, 返回空字符串;
        if not strs: return ''

        # 找最长公共前缀, 只需对比最长的字符串和最短字符串;
        s1 = min(strs)
        s2 = max(strs)
        for i, c in enumerate(s1):
            if c != s2[i]:
                return s1[:i]
        return s1

猜你喜欢

转载自blog.csdn.net/Try_my_best51540/article/details/82955913