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

问题描述 投票:0回答:1

假设我有两个字符串:

a = 'stackoverflow'
b =  'mathisgoodstackover'

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

c= 'stackover'
d = 'stackoverf'

c是最佳解决方案。 d不是,因为b不以stackoverf结尾。

我尝试使用蛮力,但不确定如何编写循环。任何有效的算法?

谢谢,

python-3.x string match prefix
1个回答
3
投票

您可以使用内置函数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])), '')
© www.soinside.com 2019 - 2024. All rights reserved.