10.最長公共字首-Leetcode 014(python)
阿新 • • 發佈:2018-12-13
- 題目描述
編寫一個函式來查詢字串陣列中的最長公共字首。
如果不存在公共字首,返回空字串 ""。
- 示例
示例 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