题解 | #最长公共前缀#
最长公共前缀
http://www.nowcoder.com/practice/28eb3175488f4434a4a6207f6f484f47
#
#
# @param strs string字符串一维数组
# @return string字符串
#
class Solution:
def longestCommonPrefix(self , strs ):
# write code here
sameChar = ""
if len(strs) == 0:
return sameChar #特殊情况返回空
maxLen = len(strs[0])
minLen = len(strs[0])
maxStrs = 0 #由于后续有判断,所以此处初始最小值定为0,
minStrs = 0 #若不定,在遇到minLen或maxLen始终不满足条件时,后续无此值报错
for i in range(len(strs)): #此处一次for循环同时找出最长和最短串
if len(strs[i]) > maxLen:
maxLen = len(strs[i])
maxStrs = i
if len(strs[i]) <= minLen:
minLen = len(strs[i])
minStrs = i
if maxStrs == minStrs:
return strs[maxStrs]
for i in range(len(strs[minStrs])): #此处一次for循环完成要求,找出最长公共前缀
if strs[minStrs][i] == strs[maxStrs][i]:
sameChar += strs[minStrs][i]
else:
break
return sameChar
由于最长公共前缀必然不可能长于最短串,所以实际上只需要比较最短串和其他任意字符串的公共部分即可,此处实际上不需要找最长串,可以节省时间,这个算法有问题,如果所有串长度相等时,可能出错

