1. 程式人生 > >10.最長公共字首-Leetcode 014(python)

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