假设我有两个字符串:
a = 'stackoverflow'
b = 'mathisgoodstackover'
我尝试从a的开头找到与b的结尾匹配的最大重叠部分。
c= 'stackover'
d = 'stackoverf'
c是最佳解决方案。d不是,因为b不以stackoverf结尾。
我尝试使用蛮力,但不确定如何编写循环。任何有效的算法?
谢谢,
问题来源:stackoverflow
您可以使用内置函数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((a[:i] for i in range(len(a), 0,-1) if b.endswith(a[:i])), '')
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。