zoukankan      html  css  js  c++  java
  • leetecode-14-最长公共子串-简单

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

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

    示例 1:

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

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

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/longest-common-prefix
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


    这道题的官方给了很多厉害的算法 字典树,大批数据进行分治

    class Solution:
        def longestCommonPrefix(self, strs) -> str:
            if not all(strs) or not strs:
                return ""
            if len(strs) == 1:
                return strs[0]
            tmp_list = sorted(strs,key =lambda s:len(s))
            tmp, pointer = tmp_list[0],len(tmp_list[0])
            # 先排序 找到最短序列 然后用最短序列里面的字符串去匹配
            while True:
                if pointer == 0:
                    return ""
                if tmp[0:pointer] == tmp_list[1][0:pointer]:
                    cursor = tmp[0:pointer]
                    break
                pointer -= 1
            tmp = tmp_list[0][0:pointer]
            for i in tmp_list[2:]:
                # 如果当前依然能够满足最小匹配的话
                if pointer == 0:
                    return ""
                while True:
                    if pointer == 0:
                        return ""
                    if tmp[0:pointer] == i[0:pointer]:
                        break
                    pointer -= 1
                # 否则 就要递减位数
            return tmp[0:pointer]
    

  • 相关阅读:
    JavaScript条件判断和循环
    JavaScript数据类型详解
    Dockerfile使用
    让ie8、ie9支持媒体查询
    事件穿透
    判断是苹果手机还是安卓手机
    ES6中字符串的扩展
    ES6数组的扩展运算符
    let和const
    ES6中函数的扩展
  • 原文地址:https://www.cnblogs.com/zengmu/p/13149881.html
Copyright © 2011-2022 走看看