码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-06-17 01:41:13      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:函数   efi   turn   alt   一个   comm   image   字符串   point   

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

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

示例?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-最长公共子串-简单

标签:函数   efi   turn   alt   一个   comm   image   字符串   point   

原文地址:https://www.cnblogs.com/zengmu/p/13149881.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!