1. 程式人生 > 其它 >LeetCode十四題 最長公共字首

LeetCode十四題 最長公共字首

技術標籤:LeetCode經典前100最長公共字首pythonleetcode

解題思路

將字串進行sort()排序,然後再比較字串內第一個單詞與最後一個單詞的共同項(sort排序是根據26個字母順序先後排序,所以不用看中的單詞)
程式碼:

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        k=""
        if not strs:
            return k
        strs.sort()
        n=len(
strs) a=strs[0] b=strs[n-1] for i in range(len(a)): if i < len(b) and a[i]==b[i]: k+=a[i] else: break return k

此外還看到個比較偷的寫法,用了python的特性[set(set是刪除同一字串內重複的字元)與zip(zip是將字串進行解壓)],取每一個單詞的同一位置的字母,看是否相同
程式碼:

class Solution
(object): def longestCommonPrefix(self, strs): str = "" for i in zip(*strs): i_set = set(i) if len(i_set)==1: str += i[0] else: break return str

下面是去學習了下zip函式遍歷,程式碼就照搬了

list_1 = [1, 2, 3, 4]
list_2 =
['a', 'b', 'c'] for x, y in zip(list_1, list_2): print(x, y)

在這裡插入圖片描述

還有set函式的使用方法

>>>x = set('runoob')
>>> y = set('google')
>>> x, y
(set(['b', 'r', 'u', 'o', 'n']), set(['e', 'o', 'g', 'l']))  # 重複的被刪除
>>> x & y         # 交集
set(['o'])
>>> x | y         # 並集
set(['b', 'e', 'g', 'l', 'o', 'n', 'r', 'u'])
>>> x - y         # 差集
set(['r', 'b', 'u', 'n'])