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