题目描述:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。

代码实现:
class Solution(object):
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
#####################################################################
#方法四:排序,比较第一个和最后一个
def fun4(strs):
def findTwoStr(str1, str2):#找两个的
n = min(len(str1), len(str2))
i = 0
while i < n and str1[i] == str2[i]: i += 1
return str1[:i]
newS=sorted(strs)
return findTwoStr(newS[0],newS[-1])
return fun4(strs)
#####################################################################
#方法三:分治
def fun3(strs):
def lcp(begin,end):
if begin==end:return strs[begin]
mid=(begin+end)//2
leftAns=lcp(begin,mid)
rightAns=lcp(mid+1,end)
minL=min(len(leftAns),len(rightAns))
for i in range(minL):
if leftAns[i]!=rightAns[i]:return leftAns[:i]
return leftAns[:minL]
return '' if not strs else lcp(0,len(strs)-1)
return fun3(strs)
##################################################################
# 方法二:纵向暴力扫描
def fun2(strs):
if not strs: return ''
ans = ''
n = min(len(s) for s in strs)
for i in range(n):
c = strs[0][i]
for j in range(1, len(strs)):
if strs[j][i] != c:
return ans
ans += c
return ans
return fun2(strs)
##################################################################
# 方法一:横向暴力扫描
def findTwoStr(str1, str2):
n = min(len(str1), len(str2))
i = 0
while i < n and str1[i] == str2[i]: i += 1
return str1[:i]
def fun1(strs):
if not strs: return ''
ans = strs[0]
n = len(strs)
for i in range(1, n):
ans = findTwoStr(ans, strs[i])
if not ans: break # 提前结束
return ans
return fun1(strs)