题解 | #最长公共前缀#

最长公共前缀

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                            #特殊情况返回空
        if len(strs) == 1:
            return strs[0]                             #只有一个的情况直接返回其本身
        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 minLen == maxLen:                           #原题测试用例不足,如果全部等长的时候,又恰好取到的两个不同的串的长度一致时,会返回错误结果,如["abca","abcc","abce","abcf","abca"]时,会返回"abca"而非"abc"
            for j in range(len(strs[0])):
                for i in range(1,len(strs)):
                    if strs[0][j] == strs[i][j]:
                        if i >= len(strs)-1:
                            sameChar += strs[0][j]
                    else:
                        break
            return sameChar                            #此部分代码不加仍可以通过题目的样例测试
        for i in range(len(strs[minStrs])):            #此处一次for循环完成要求,找出最长公共前缀
            if strs[minStrs][i] == strs[maxStrs][i]:
                sameChar += strs[minStrs][i]
            else:
                break
        return sameChar

将情况拆开讨论,牺牲一定的空间复杂度换取时间复杂度的降低,通过分情况讨论来加速程序运行,本质核心代码还是纵向比较,只是将非等长的情况下抽离出来看,优化非等长时的比较次数

全部评论

相关推荐

不愿透露姓名的神秘牛友
2025-12-17 16:48
今天九点半到公司,我跟往常一样先扫了眼电脑,屁活儿没有。寻思着没事干,就去蹲了个厕所,回来摸出手机刷了会儿。结果老板刚好路过,拍了我一下说上班别玩手机,我吓得赶紧揣兜里。也就过了四十分钟吧,我的直属领导把我叫到小隔间,上来就给我一句:“你玩手机这事儿把老板惹毛了,说白了,你可以重新找工作了,等下&nbsp;HR&nbsp;会来跟你谈。”&nbsp;我当时脑子直接宕机,一句话都没憋出来。后面&nbsp;HR&nbsp;找我谈话,直属领导也在旁边。HR&nbsp;说我这毛病不是一次两次了,属于屡教不改,不光上班玩手机,还用公司电脑看论文、弄学校的事儿。我当时人都傻了,上班摸鱼是不对,可我都是闲得发慌的时候才摸啊!而且玩手机这事儿,从来没人跟我说过后果这么严重,更没人告诉我在公司学个习也算犯错!连一次口头提醒都没有,哪儿来的屡教不改啊?更让我膈应的是,昨天部门刚开了会,说四个实习生里留一个转正,让大家好好表现。结果今天我就因为玩手机被开了。但搞笑的是,开会前直属领导就把我叫去小会议室,明明白白告诉我:“转正这事儿你就别想了,你的学历达不到我们部门要求,当初招你进来也没打算给你这个机会。”合着我没入贵厂的眼是吧?可我都已经被排除在转正名单外了,摸个鱼至于直接把我开了吗?真的太离谱了!
rush$0522:转正名单没进,大概率本来就没打算留你
摸鱼被leader发现了...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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