# class Solution:
# def longestCommonPrefix(self, strs: List[str]) -> str:
# if not strs: return ""
# if len(strs)==1: return strs[0]
# prefix = strs[0]
# for i in range(1,len(strs)):
# prefix = self.compute_prefix(prefix,strs[i])
# if not prefix:
# break
# return prefix
# def compute_prefix(self,prefix,str):
# index = min(len(prefix),len(str))
# if index <= 0:
# return ""
# for i in range(index):
# if prefix[i]!=str[i]:
# return prefix[0:i]
# return prefix[0:index]
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
def lcp(start, end):
if start == end:
return strs[start]
mid = (start + end) // 2
lcpLeft, lcpRight = lcp(start, mid), lcp(mid + 1, end)
minLength = min(len(lcpLeft), len(lcpRight))
for i in range(minLength):
if lcpLeft[i] != lcpRight[i]:
return lcpLeft[:i]
return lcpLeft[:minLength]
return "" if not strs else lcp(0, len(strs) - 1)
思路1:很正常地横向比较,时间复杂度O(mn),空间复杂度O(1)
思路2:分治递归,时间复杂度O(mn),空间复杂度O(mlogn)
递归长度logn,每一层要保存m的长度。m为字符串平均长度。