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]

posted @ 2020-06-16 23:27  ZMZ沐梓  阅读(172)  评论(0编辑  收藏  举报