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
    
    
  • 相关阅读:
    JavaSript模块化 && AMD CMD 详解.....
    js实现touch移动触屏滑动事件
    页面布局之BFC 微微有点坑
    前端代码优化
    HTTP消息头详解
    SASS
    移动互联,手机页面设计
    投身移动开发必须知道的20件事
    浅析HTML5在移动应用开发中的使用
    js数组的操作
  • 原文地址:https://www.cnblogs.com/davis12/p/15357455.html
Copyright © 2011-2022 走看看