• LeetCode Easy: 14. Longest Common Prefix


    参考博客:http://blog.csdn.net/nxhyd/article/details/71566780

    一、题目

    Write a function to find the longest common prefix string amongst an array of strings.

    找公共最大前缀

    二、思路

    这里提供两种思路,分别对应下面两组代码:

    1、暴力方法;外循环,遍历整个字符串组,首先找到字符串数组中那个最短的字符串的长度(请注意这里并不是找最短字符串),内循环,相当于在最短字符串长度范围内(因为公共前缀的长度肯定不可能超过最短字符串的长度),循环遍历此长度范围内的每个子串的前缀。这个的复杂度简单计算下O(len(strs)*lenth)

    2、首先(任意)选取第一个作为公共最大前缀字符串,然后循环遍历每个子串,按条件做长度减一操作。复杂度为O(len(strs))

    三、代码如下:

    #coding:utf-8
    import time
    def longestCommonPrefix(strs):
        """
        :type strs: List[str]
        :rtype: str
        """
    
        if strs == []:
            return ''
        else:
            for i in range(1, len(strs)):
                l1 = len(strs[0])
                l2 = len(strs[i])
                if l1 > l2:
                    lenth = l2
                else:
                    lenth = l1   #lenth表示的是字符串数组中最短的那个字符
                strs[0] = strs[0][0:lenth]  #表示公共前缀
                for j in range(lenth):
                    if strs[0][j] != strs[i][j]:
                        strs[0] = strs[0][0:j]
                        break
            print(strs[0])
            return strs[0]
    
    def longestCommonPrefix2(strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if strs == []:
            return ''
        prefix = strs[0]
        for i in range(1,len(strs)):
            if not prefix:
                return ''
            else:
                while prefix not in strs[i][:len(prefix)] and len(prefix)>0:
                    prefix = prefix[:len(prefix)-1]
        return prefix
    
    if __name__ == '__main__':
        a = ['abc','abd','abcd']
        starttime = time.clock()
        #longestCommonPrefix2(a)
        longestCommonPrefix2(a)
        elapsed = (time.clock()-starttime)
        print(elapsed)
        print("this programe run %d ms"%(elapsed))
    

      

    既然无论如何时间都会过去,为什么不选择做些有意义的事情呢
  • 相关阅读:
    十一、 Façade外观(结构型模式)
    十七、 Mediator 中介者(行为型模式)
    十三、 Proxy代理(结构型模式)
    也谈.net平台的委托扩展篇
    也谈.net平台的委托基本篇
    十六、 Interpreter 解释器(行为型模式)
    十四、 Template Method模板方法(行为型模式)
    十八、 Iterator 迭代器(行为型模式)
    十五、 Command 命令(行为型模式)
    十二、 Flyweight享元(结构型模式)
  • 原文地址:https://www.cnblogs.com/xiaodongsuibi/p/8605328.html
Copyright © 2020-2023  润新知