我之前的帖子引起了很多混乱,并且充斥着与我的问题无关的答案。 (我没有澄清事情的错误)我标记了这个帖子,这是新帖子。 所以基本上我想做一个单词的结合。
EG1
input [jason, sonny, nyorth]
output [jason, sonny, nyorth, jasonnyorth]
EG2
Sample input: [aw, was,poq, qo, soo]
Output [aw, was, poq, qo, soo, awasoo, poqo]
EG3
input: `[keyboard, ardjimmy]
output: `[keyboard, ardjimmy, keyboardjimmy]
我正在尝试输出
['jimmy', 'myolita']
jimmyolita
['jimmy', 'myolita', 'jimmyolita']
['myolita', 'jimmy']
jimmyolita
['myolita', 'jimmy', 'jimmyolita']
我知道这是一个双循环但我只是继续得到超级奇怪的东西。我想保持我的帖子简单,所以我没有发布我的尝试S =。在旁注中我也不喜欢我做"检查"和" maxNum"事情,我有一种感觉,它并没有覆盖所有情况,并给出了我特定情况下的奇怪输出。我更喜欢在for循环中执行它,因为这里没有列出其他部分问题。一个例子是当有无限的情况时:
[abc, bca] -> [abc, ca, abca] -> [abc, ca, abca, abcabc] -> it will keep going.
testing = ["jimmy", "myolita"]
testing1 = ["myolita", "jimmy"]
def frags(strings):
check = 1
maxNum = 1
for i in range(0,len(strings[1])):
if strings[0].find(strings[1][:i]) > maxNum:
check = 0
maxNum = strings[0].find(strings[1][:i])
if check == 0:
toReturn = strings[0][:maxNum] + strings[1]
strings.append(toReturn)
else:
toReturn = "no match"
return toReturn
print(testing)
print(frags(testing))
print(testing)
print(" ")
print(testing1)
print(frags(testing1))
print(testing1)
答案 0 :(得分:2)
我认为你的规则是这样的:如果第一个字符串的后缀也是第二个字符串的前缀,请将其删除。然后合并两个字符串。
如果您向后搜索,从整个字符串开始向下搜索,而不是从单个字符开始并且正在进行处理,则除了当前后缀之外,您不需要跟踪任何内容。重新测试换句话说:
def frags(strings):
left, right = strings
for i in reversed(range(len(left))):
if right.startswith(left[-i:]):
return left[:-i] + right
return left+right
答案 1 :(得分:0)
字符串切片可能会使代码更多更简单。这里有一些东西可以帮助你入门:
def overlap(left, right):
for i in reversed(range(len(left))):
if left[-i:] == right[:i]:
break
return left + right[i:]
for pair in [
('keyboard', 'ardjimmy'),
('jimmy', 'myolita'),
('myolita', 'jimmy'),
]:
left, right = pair
print pair, '-->', overlap(left, right), overlap(right, left)