14. Longest Common Prefix
Problem
Write a function to find the longest common prefix string amongst an array of strings.
在一个字符串组成的列表里,查找通用的前缀
Solution
原思路需要考虑情况比较多
- 最短元素不止一个,直接使用最短元素比较行不通(通用前缀可能不存在);
tmp = map(len,strs)
minstr = strs[tmp.index(min(tmp))]
["a","b"]
["abab","aba","abc"]
- 最长元素不止一个,["flower","flow","flight"], 不同最长元素值不同
- 判断空列表
- 判断列表中存在空元素
- 对每个元素进行切片,切片长度以最短元素长递减,每次切片后变更为set,判断元素数量,数量为1,则为所求前缀;数量为0/切到最后,无通用前缀
class Solution(object):
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if 0 == len(set(strs)): # if not strs
return ''
tmp = map(len,strs)
minlen = min(tmp) # int length
if 0 == minlen:
return ''
strs = [ x[:minlen] for x in strs]
for x in range(minlen):
if 1 == len(set(strs)):
return strs[0]
strs = [ x[:-1] for x in strs]
return ''
Discuss Solution
- strs = ["aac","ab",'addd']
- zip(*strs)
- [('a', 'a', 'a'), ('a', 'b', 'd')]
class Solution:
# @return a string
def longestCommonPrefix(self, strs):
if not strs: #处理空列表的情况
return ""
for i, letter_group in enumerate(zip(*strs)):
if len(set(letter_group)) > 1:
return strs[0][:i]
else: #处理含有''元素的情况
return min(strs)

浙公网安备 33010602011771号