编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z
。
class Solution(object):
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
length = 0
temp = []
res = ''
zip_result = zip(*strs)
for i in range(len(zip_result)):
if len(set(zip_result[0])) != 1:
return ''
elif len(set(zip_result[i])) == 1:
temp.append(set(zip_result[i]))
for item1 in temp:
item1 = list(item1)[0]
res += item1
return (''.join(res))
第二次复习发现之前的方法存在错误:
当输入的数据为如下的:
strs = ["flower","flow","fliwht"]
输入应该为 ‘fl’
然而实际的输出则是:
/usr/bin/python3.5 "/home/trami/Data Structure/study.py"
flw
分析原因:由于之前使用zip方法使所有的字符串进行处理,但是选择最长的部分则是没有考虑的十分清楚,简单以为使用集合就可以去重。
正确的方法:
class Solution:
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if strs == []:
return ''
if len(strs) == 1:
return strs[0]
str_min = min(strs)
str_max = max(strs)
for idx, value in enumerate(str_min):
if value != str_max[idx]:
return str_min[:idx]
return str_min