Python 如果字符串具有重叠区域,则连接字符串

Python 如果字符串具有重叠区域,则连接字符串,python,python-2.7,while-loop,Python,Python 2.7,While Loop,我正在尝试编写一个脚本,该脚本将查找在每个字符串的开头或结尾共享5个字母重叠区域的字符串(如下面的示例所示) 我正在尝试创建一个新字符串,将这三个字符串连接在一起,因此输出为: facgakfjeakfjekfzpgghiaewkfjaekfjkjakjfkjaejfaefkajewf 编辑: 这是输入: x = ('facgakfjeakfjekfzpgghi', 'kjfkjaejfaefkajewf', 'pgghiaewkfjaekfjkjakjfkj') **名单上没有排序 到目前

我正在尝试编写一个脚本,该脚本将查找在每个字符串的开头或结尾共享5个字母重叠区域的字符串(如下面的示例所示)

我正在尝试创建一个新字符串,将这三个字符串连接在一起,因此输出为:

facgakfjeakfjekfzpgghiaewkfjaekfjkjakjfkjaejfaefkajewf
编辑:

这是输入:

x = ('facgakfjeakfjekfzpgghi', 'kjfkjaejfaefkajewf', 'pgghiaewkfjaekfjkjakjfkj')
**名单上没有排序

到目前为止,我写的内容*不正确:

def findOverlap(seq)
    i = 0
    while i < len(seq): 
        for x[i]:
        #check if x[0:5] == [:5] elsewhere

 x = ('facgakfjeakfjekfzpgghi', 'kjfkjaejfaefkajewf', 'pgghiaewkfjaekfjkjakjfkj')
findOverlap(x)
def findOverlap(seq)
i=0
而我
在每对候选字符上循环,倒转第二个字符串并使用中的答案创建一个字典,将每个字符串的前5个字符映射到其尾部

strings = {s[:5]: s[5:] for s in x}
和一组所有后缀:

suffixes = set(s[-5:] for s in x)
现在查找前缀与任何后缀都不匹配的字符串:

prefix = next(p for p in strings if p not in suffixes)
现在我们可以按照字符串链进行操作:

result = [prefix]
while prefix in strings:
    result.append(strings[prefix])
    prefix = strings[prefix][-5:]
print "".join(result)

蛮力方法-执行所有组合并返回第一个匹配链接术语的组合:

def solution(x):
    from itertools import permutations
    for perm in permutations(x):
        linked = [perm[i][:-5] for i in range(len(perm)-1) 
                               if perm[i][-5:]==perm[i+1][:5]]
        if len(perm)-1==len(linked):
            return "".join(linked)+perm[-1]
    return None

x = ('facgakfjeakfjekfzpgghi', 'kjfkjaejfaefkajewf', 'pgghiaewkfjaekfjkjakjfkj')
print solution(x)

显示您的输入please@RomanPekar,好的,我编辑它以显示inputzpgghi是一个6个字母的字符串,您的意思是“5个或更多字母的重叠区域”?并且
kjfjj
不匹配
kjfkj
哪个字符串是第一个?若有多个字符串的前缀和当前字符串的后缀相同,则选择哪个字符串?你能提供一个例子,其中包括这样的情况吗?为什么颠倒第二个字符串?很好的一个,+1。我在考虑获取前缀和后缀,对其进行排序,然后进行链,但这一个是better@user3358205:输入列表
x
可以由任意数量的字符串组成。
def solution(x):
    from itertools import permutations
    for perm in permutations(x):
        linked = [perm[i][:-5] for i in range(len(perm)-1) 
                               if perm[i][-5:]==perm[i+1][:5]]
        if len(perm)-1==len(linked):
            return "".join(linked)+perm[-1]
    return None

x = ('facgakfjeakfjekfzpgghi', 'kjfkjaejfaefkajewf', 'pgghiaewkfjaekfjkjakjfkj')
print solution(x)