【发布时间】:2020-08-07 01:19:04
【问题描述】:
我正在尝试编写一个程序来找到两个字符串之间最长的交集。条件是:
- 如果没有公共字符,程序将返回一个空链。
- 如果有多个长度相同的公共字符的子字符串,它应该返回最大的那个,例如,对于“bbaacc”和“aabb”,重复的子字符串是“aa”和“bb”,但作为“bb” > "aa",所以程序必须只返回 "bb"。
- 最后,程序应该返回最长的公共子字符串,例如,对于“programme”和“grammaire”,返回应该是“gramm”而不是“gramme”。
我的代码在最后一个条件下存在问题,我该如何更改它以使其按预期工作?
def intersection(v, w):
if not v or not w:
return ""
x, xs, y, ys = v[0], v[1:], w[0], w[1:]
if x == y:
return x + intersection(xs, ys)
else:
return max(intersection(v, ys), intersection(xs, w), key=len)
司机:
print(intersection('programme', 'grammaire'))
【问题讨论】:
-
这是最长公共子序列问题的变体。它可以使用动态规划来解决。
标签: python string intersection