题解 | #最长公共前缀#

最长公共前缀

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

由于最长公共前缀必然不可能长于最短串,所以实际上只需要比较最短串和其他任意字符串的公共部分即可,此处实际上不需要找最长串,可以节省时间,这个算法有问题,如果所有串长度相等时,可能出错

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务