Как добавить строку в другую строку и удалить перекрывающуюся часть? - PullRequest
0 голосов
/ 29 сентября 2018

Как добавить одну строку в другую и удалить деталь посередине, если она двойная?

Я действительно не знаю, как это объяснить, но я хочу сделать следующее:

Допустим,

string1 = "abcde"

string2 = "cdefg"

Как создать переменную string1 + string2, но с частью "cde" только один раз?

Я ищу что-то вроде:

string3 = merge(string1, string2)

Это сделало бы string3 "abcdefg", а не "abcdecdefg"

Я не смог найти его в Google, поэтому я спрашиваю здесь.

Любая помощьбудет принята с благодарностью:)

Ответы [ 3 ]

0 голосов
/ 29 сентября 2018

Мы можем искать каждое вхождение первого символа s2 в s1 и проверять, является ли остаток 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
0 голосов
/ 29 сентября 2018

Это может быть просто реализовано с помощью python set () следующим образом.

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

Объяснение: set() удаляет дублирующиеся элементы, sorted() сортирует,и join() объединяет все это обратно.

0 голосов
/ 29 сентября 2018

Вы можете проверить, есть ли сначала перекрытие, а затем добавить только неперекрывающиеся части:

# 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:]
...