zoukankan      html  css  js  c++  java
  • 014-leetcode算法实现之最长公共前缀-longest-common-prefix(LCP)

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

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

    示例 1:

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

    示例 2:

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

    提示:
    1 <= strs.length <= 200
    0 <= strs[i].length <= 200
    strs[i] 仅由小写英文字母组成

    python

    # 方法一 时间O(mn),空间O(1)
    def longest_common_prefix(strs: [str]) -> str:
        """
        最长公共前缀 -> 纵向扫描
        :param strs: [str]
        :return: str
        """
        if not strs:
            return ''
    
        length, count = len(strs[0]), len(strs)
        for i in range(length):
            ch = strs[0][i]
            for j in range(1, count): # 第二行开始比较
                if i == len(strs[j]) or strs[j][i] != ch:
                    return strs[0][:i]
    
        return strs[0]
    
    # 方法二
    def lcp(strs: [str]) -> str:
        """
        最长公共前缀 -> 横向扫描
        # 可以先按字符串长度排序
        :param strs:  [str]
        :return: str
        """
        if not strs:
            return ''
    
        def lcp_handle(prefix: str, next: str) -> str:
            length, index = min(prefix, next), 0
            while index < length and prefix[index] == next[index]:
                index += 1
            return prefix[:index]
    
        prefix, count = strs[0], len(strs)
        for i in range(1, count):
            prefix = lcp_handle(prefix, strs[i])
            if not prefix:
                break
        return prefix
    
    
    if __name__ == "__main__":
        strs1 = ['flight', 'flies', 'fly']
        print(longest_common_prefix(strs1)) # 此情况比较3*3=9
        strs2 = ['skxxuard'] * 5
        print(longest_common_prefix(strs2)) # 最坏情况,元素数量5,每个元素长度8,一共比较40次,即mn
    
    
  • 相关阅读:
    剑指offer面试题17:合并两个排序的链表
    剑指offer面试题16:反转链表
    剑指offer面试题15:链表中倒数第K个节点
    Jinja2.template渲染两种常见用法
    hadoop集群运维碰到的问题汇总
    hbase配置参数总结
    hbase内核学习总结
    zookeeper学习笔记
    mongodb 3.2性能测试
    kafka内部结构笔记
  • 原文地址:https://www.cnblogs.com/davis12/p/15357455.html
Copyright © 2011-2022 走看看