LeetCode#14 最长公共前缀
献上我的做题方法和思路。
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