Python无导包实现:查找列表w的最长前缀(同时为w2后缀)
实现需求
给定两个列表,实现如下签名的函数:
def function(w,w2): # => this is how I want to define my function (no more inputs than this 2 lists)
函数需要返回w的最长前缀,且该前缀同时是w2的后缀,实现全程不能导入任何模块,仅使用Python基础逻辑。
实现思路
- 匹配长度存在天然上限:前缀长度不能超过
w的总长度,后缀长度不能超过w2的总长度,因此最大可能匹配长度为两个列表长度的最小值 - 校验逻辑从最大可能长度开始,按长度从高到低遍历:第一个满足「
w前k个元素与w2最后k个元素完全相等」的k值对应的前缀,即为目标最长前缀,直接返回即可,无需继续校验更短的长度 - 遍历完所有非零长度仍无匹配时,返回空列表
完整代码
def function(w, w2): # 计算最长可能的匹配长度 max_match_len = min(len(w), len(w2)) # 从长到短遍历所有可能的匹配长度 for k in range(max_match_len, 0, -1): # 对比w前缀和w2后缀 if w[:k] == w2[-k:]: return w[:k] # 无匹配非空前缀时返回空列表 return []
校验示例
几个典型场景的运行结果:
- 入参
w = [1,2,3,4]、w2 = [0,1,2,3]时,返回[1,2,3] - 入参
w = ['a','b']、w2 = ['b','c','d']时,返回[] - 入参
w = [True, 0, 'test']、w2 = [1, False, True, 0, 'test']时,返回[True, 0, 'test']
内容的提问来源于stack exchange,提问作者Margarida Mendonça
相关产品推荐
相关产品推荐

