LeetCode十四題 最長公共字首
阿新 • • 發佈:2021-02-06
技術標籤: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'])