如何找到与其他 python 3 中的最后 n 个字符串匹配的前 n 个字符串之间的重叠?
How to find the overlap between first n string that match last n string in others python 3?
假设我有两个字符串:
a = 'Whosebug'
b = 'mathisgoodstackover'
我尝试从 a
的开头找到与 b
的结尾匹配的最大重叠部分。
c= 'stackover'
d = 'stackoverf'
c
是最优解。 d
不是,因为 b
不以 stackoverf
结尾。
我尝试使用暴力破解,但不确定如何编写循环。任何有效的算法?
谢谢,
您可以使用内置函数 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 built-in function with a generator expression
缩小
next((a[:i] for i in range(len(a), 0,-1) if b.endswith(a[:i])), '')
假设我有两个字符串:
a = 'Whosebug'
b = 'mathisgoodstackover'
我尝试从 a
的开头找到与 b
的结尾匹配的最大重叠部分。
c= 'stackover'
d = 'stackoverf'
c
是最优解。 d
不是,因为 b
不以 stackoverf
结尾。
我尝试使用暴力破解,但不确定如何编写循环。任何有效的算法?
谢谢,
您可以使用内置函数 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 built-in function with a generator expression
next((a[:i] for i in range(len(a), 0,-1) if b.endswith(a[:i])), '')