如何在其他python 3中找到与最后n个字符串匹配的第一个n个字符串之间的重叠?

Posted

技术标签:

【中文标题】如何在其他python 3中找到与最后n个字符串匹配的第一个n个字符串之间的重叠?【英文标题】:How to find the overlap between first n string that match last n string in others python 3? 【发布时间】:2020-03-13 16:34:36 【问题描述】:

假设我有两个字符串:

a = '***'
b =  'mathisgoodstackover'

我尝试从a 的开头找到与b 的结尾匹配的最大重叠部分。

c= 'stackover'
d = 'stackoverf'

c 是最优解。 d 不是,因为b 不以stackoverf 结尾。

我尝试使用蛮力,但不知道如何编写循环。有什么高效的算法吗?

谢谢,

【问题讨论】:

【参考方案1】:

您可以将内置函数 max 与列表理解一起使用:

max([a[:i] for i in range(1,len(a) + 1) if b.endswith(a[:i])], key=len)

输出:

'stackover'

也适用于特殊情况:

a = 'ssss'
b =  'mathisgoodssssss'
max([a[:i] for i in range(1,len(a) + 1) if a[:i] == b[-i:]], key=len)

输出:

'ssss'

或者按照@ShadowRanger 的建议,您可以从i 开始尽可能大,然后使用next 内置函数和generator expression 缩小

next((a[:i] for i in range(len(a), 0,-1) if b.endswith(a[:i])), '')

【讨论】:

使用b.endswith(a[:i]) 节省一点切片工作。您也可以向后工作,i 开始尽可能大并缩小,允许您使用带有genexpr 的next 而不是max+key=len(允许您在第一次命中时短路,因为所有其他命中必然会更小)。

以上是关于如何在其他python 3中找到与最后n个字符串匹配的第一个n个字符串之间的重叠?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 DataFrame,Python-3 中找到前 N 个最小值

输入一个固定的簇质心,找到其他 N 个(python)

java 如何在字符串查找最后字符的位置

如何从python中的文本文件中获取所有3克?

Python 3:如何找到最长的字符串

如何在线性“祖先-后代”关系中找到最后一个后代(与其他条件匹配)