1.问题描述
给定一字符串列表,找到所有字符串最长公共前缀
2.解题思路
从前往后逐个求前缀
纵向比较,公共前缀长度从1往后试探
基于纵向比较,可以使用二分查找方法确定
3.最终代码
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
def isCommonPredix(length):
str0,count=strs[0][:length],len(strs)
return all(strs[i][:length]==str0 for i in range(1,count))
if not strs:
return ""
minLength=min(len(s) for s in strs)
low,high=0,minLength
while low<high:
mid=(high-low+1)//2+low
if isCommonPredix(mid):
low=mid
else:
high=mid-1
return strs[0][:low]
3.1 判断条件
isCommonPrefix(mid)决定low或high的更新
一直到low和high相等
3.2 low,high和mid
mid=low+(high-low+1)//2
例如[1,2,3,4,5]取到正中间3
[1,2,3,4]取到最中间两个数的靠右者3
如果mid满足前缀: low=mid
如果不满足前缀: high=mid-1
两个
[+,-] low8,high9
mid=9 - high=9-1=8 循环终止
[+,+] low8,high9
mid=9 + low=9 循环
[+,+,-,-] index 5678 ----> [+,+] 56 --->mid=6