leetecode-14-最长公共子串-简单

Posted zengmu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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]

技术图片








以上是关于leetecode-14-最长公共子串-简单的主要内容,如果未能解决你的问题,请参考以下文章

两个字符串的最长公共子串python代码

没有动态编程或后缀树的最长公共子串

最长公共子序列

最长公共子串与最长公共子序列

动态规划解最长公共子串

最长公共子串(图文版)