LeetCode题库第十四题(简单系列)

题目及要求:

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""

示例 1:

输入: ["flower","flow","flight"]
输出: "fl"

示例 2:

输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

说明:

所有输入只包含小写字母 a-z 。

思路:

看到题目的时候,第一想法是要用需要用到列表的切片,而且肯定是要遍历切片的,但是怎么求得strs里面元素每个元素的最小值呢???这是一个问题,然后我用了len(strs[i][m])的形式,来求最小值,后来自己运行之后再看出来,这个长度就是1,蠢哭。

在我尝试了n边,而且最后在LeetCode上面都运行错误的时候,我放弃了自己思考,转向了网络,怎么去寻求前人的知识,在看了一些文章以后,我决定以这个文章作为参考 Python实现-14.最长公共前缀看到里面的方法之后,我有了大致的方向,于是我动手开始编码。。。。

class Solution:
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        m=0
        list1=[]
        list2=[]
        if len(strs)==0:
            return ""
        else:
            min_num = min([len(x) for x in strs])#求得最小的字符串长度
        if strs[0]=="":
            return ""
        while m<min_num:
            for i in range(len(strs)):
                if strs[i][m]==strs[i-1][m]:
                    list1.append(strs[i][m])
            m=m+1


        for i in list1:
            if list1.count(i)==len(strs):
                if i not in list2:
                    list2.append(i)


            elif len(strs)==len(strs)*min_num:
                if list1.count(i)==len(strs):
                    if i not in list2:
                        list2.append(i)
            else:
                if list1.count(i)==len(strs)*min_num:
                    list2=strs[0]
        return "".join(list2)

以上代码长也就算了,居然还是报错了,恩,在LeetCode上面错误的位置进行修改还是通过不了,o(╥﹏╥)o,我已放弃思考。

重新再看了一遍文章,我决定按照第二个方法去编码。我要站在巨人的肩上看世界。

class Solution:
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        m=0
        if len(strs)==0:#当为空列表时
            return ""
        else:
            min_num = min([len(x) for x in strs])#求出最小的长度
        if len(strs)==1:#当字符串为""和只有只有1个字符串时
            return strs[0]


        while m<min_num:
            for i in range(len(strs)):
                if strs[i][m]!=strs[i-1][m]:#此处如果用i+1后续会报出out of range的情况
                    return strs[0][:m]#此处表明以strs里面的第一个字符串为参照,当存在m时,返回
                #m前面的字符
            m+=1
        return strs[0][:m]

这个通过了,虽然不是自己想到的方法,但是还是可耻的放个图吧。敲打敲打敲打


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值