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]