【问题标题】:How do I add a string to another string and remove the overlapping part?如何将一个字符串添加到另一个字符串并删除重叠部分?
【发布时间】:2018-09-29 14:42:34
【问题描述】:

如何将一个字符串添加到另一个字符串并删除中间的一部分,如果它是双倍的?

我真的不知道如何解释,但这就是我想做的:

让我们说

string1 = "abcde"

string2 = "cdefg"

如何创建一个 string1+string2 但“cde”部分只有一次的变量?

我正在寻找类似的东西:

string3 = merge(string1, string2)

这会使 string3 变成 "abcdefg" 而不是 "abcdecdefg"

我在谷歌上找不到,所以我在这里问。

任何帮助将不胜感激:)

【问题讨论】:

  • 先写在纸上。看看步骤是什么。然后写代码。

标签: python string merge overlapping


【解决方案1】:

您可以先检查是否有重叠,然后只附加不重叠的部分:

# Find overlap if there is any
for i in range(1, len(string2)):
    if string1.endswith(string2[:i]):
        k = i

# Concatenate strings:
string3 = string1 + (string2 if k is None else string2[k:])

或者更简单,先将k设置为零:

# Find overlap if there is any
k = 0
for i in range(1, len(string2)):
    if string1.endswith(string2[:i]):
        k = i

# Simply concatenate them
string3 = string1 + string2[k:]

【讨论】:

  • 使用string1 = "abede"string2 = "edefg",你会得到'abedeedefg' 而不是'abedefg'。
【解决方案2】:

我们可以在s1中查找s2的第一个字符的每个出现,并测试从这个出现的s1的其余部分是否是s2的开始。我们需要从s1 的开头到结尾都这样做,以确保获得最大可能的重叠。

import re

def fusion(s1, s2):
    for m in re.finditer(s2[0], s1):
        if s2.startswith(s1[m.start():]):
            return s1[:m.start()] + s2
    # no overlap found
    return s1 + s2


string1 = "abede"
string2 = "edefg" # overlap: 'ede'

print(fusion(string1, string2))
# abedefg

【讨论】:

    【解决方案3】:

    这可以简单地用 python set() 实现如下..

    >>> string1 = "abcde"
    >>> string2 = "cdefg"
    >>> string3 = string1 + string2
    >>> print (''.join(sorted(set(string3))))
    abcdefg
    

    解释:set() 删除重复元素,sorted() 排序,join() 将其全部组合回来。

    【讨论】:

    • 如果 string1 = "abedde", string2 = "eddefghi" 你会得到 'abdefghi' 而不是 'abeddefghi'
    猜你喜欢
    • 1970-01-01
    • 2020-03-17
    • 2020-04-13
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多