编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
def lcp(start, end):
if start == end:
return strs[start]
mid = (start + end) // 2
Lcp_left, Lcp_right = lcp(start,mid), lcp(mid+1,end)
min_length = min(len(Lcp_left), len(Lcp_right))
for i in range(min_length):
if Lcp_left[i] != Lcp_right[i]:
return Lcp_left[:i]
return Lcp_left[:min_length]
# if not strs:
# return ""
# else:
# return lcp(0,len(strs)-1)
return "" if not strs else lcp(0, len(strs) - 1)
分支算法:分而治之,采用递归调用,每次调用都兵分两路同时进行。
二分法:查找数列中某个元素的位置,从两边向中间逼近,直至找到所需值,或两边指针相错开,则查找无值。