14. Longest Common Prefix

好久没刷leetcode了,上次刷还是大三暑假刷的,当时找工作很心急,并没有静下心来写,匆匆忙忙的刷了四十道,效果并不好。现在研一,希望能够静下心来一天一道,打好基础。之前用的c++写的,c++里面有指针,很方便,也很难,很多人都说面试用c++写是给自己挖了一个坑,我最近用python比较多,所以打算用python刷

奉上我的代码

class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        
        if(len(strs)==0):
            return ""        
        flag=0
        temp=""
        i=0
        minLen=len(strs[0]) 
        print(minLen)
        for str in strs:
            if(len(str)<minLen):
                minLen=len(str)                   
        if(minLen==0):
            return ""        
        for i in range(minLen):
            temp=strs[0][0:i+1]
            for str in strs:
                if(str[0:i+1]==temp):
                    continue
                else:
                    flag=1
                    break
            if(flag==1):
                break
            i+=1
        return temp[0:i]

教训:如果发现需要跳出两层循环的时候,用flag标记一下可以解决

我的想法是:

1、先判断是否是空的数组,即判断len(strs)的长度,如果是0就返回“”

2、求出整个字符串最短的那个长度,如果有空的字符串,最短长度肯定也是0,返回“”

3、接下来是两层循环,外层循环是从0到最短字符串长度(最长公共子串最多是最短字符串长度),,用一个字符串首先存下来第一个字符串的第一个字母,内层循环是一个个遍历字符串,比较第一个字母是否和存下来的一样,一样的话比较第二个,如果有不一样,就跳出,标记flag为1,最后返回一样的字符。

我刚开始没用flag标记,一直考虑如果出现else的情况,怎样跳出两层循环(经常会碰到这种情况),后来百度到用flag,希望以后能吸取到这个教训


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值