您可以从列表中的一个字符串(存储为字符串)开始,并为列表中的每个剩余字符串(存储为候选字符)开头:
>候选人是字符串的一部分,
>候选人包含字符串,
>候选人的尾巴与弦头相匹配,
>或者,候选人的头部匹配弦的尾部,
根据它们如何重叠来组合两个字符串,然后递归地重复该过程,从剩余的字符串中移除重叠的字符串并附加组装的字符串,直到列表中只剩下一个字符串,此时它是完全有效的可以添加到最终输出的已组装字符串.
由于几个字符串可能有多种方式可以相互重叠,其中一些可能导致相同的汇编字符串,因此您应该输出一组字符串:
def assemble(str_list, min=3, max=15):
if len(str_list) < 2:
return set(str_list)
output = set()
string = str_list.pop()
for i, candidate in enumerate(str_list):
matches = set()
if candidate in string:
matches.add(string)
elif string in candidate:
matches.add(candidate)
for n in range(min, max + 1):
if candidate[:n] == string[-n:]:
matches.add(string + candidate[n:])
if candidate[-n:] == string[:n]:
matches.add(candidate[:-n] + str