獻上我的做題方法和思路。 class Solution(object): def longestCommonPrefix(self, strs): """ :type strs: List[str] :rtype: str """ common = '' time = 0 len_list = [] ...
獻上我的做題方法和思路。
class Solution(object):
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
common = ''
time = 0
len_list = []
if not strs: #如果沒有單詞則返回‘’,我也是提交過一次後才發現要寫這個的
return common
for x in strs:
len_list.append(len(x))
min_len = min(len_list) #找到最小的單詞長度
while time < min_len:
same = []
first = True
for single in strs:
# print(single[time])
if first or (single[time] == same[0]): #插入的條件為:第一次插入或是相同元素
same.append(single[time])
first= False
if (len(same) != len(strs)): #如果有不同元素的話,列表的長度就等於單詞總個數
break
else:
common += single[time] #如果每個單詞的第i個元素都相同則加上這個元素
time += 1
return common
class Solution(object):
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if strs == []:
return ''
for i in range(len(strs[0])):
for str in strs:
if len(str) <= i or str[i] != strs[0][i]:
##### 條件一:若一是最長的則i會一直變大,達到出現判斷第一個單詞的第i個字母發現有單詞長度小於i時,則前面i個單詞都是公共首碼。
##### 條件二:如果當前這個單詞的第i個元素和第一個單詞的第i個元素不同則前i個元素是公共首碼
return strs[0][:i]
return strs[0]
##### 若全部都一樣,則第一個所有元素都是公共首碼
這個方法是大神寫的,只用時28ms的,使用到了itertools庫,很簡便也很快捷。記錄在這,學習一下。
from itertools import izip
class Solution(object):
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
r = ''
for letters in izip(*strs):
com_prefix = set(letters)
if len(com_prefix) != 1:
return r
r += com_prefix.pop()
return r