Как сделать merge двух строк?

163 просмотра
0
0 Комментариев

У нас есть:

is_merge('localhost', 'local', 'host')
True
is_merge('localhost', 'lacol', 'tosh')
True
is_merge('localhost', 'loc', 'hos')
False

Согласно этому условию, мы должны сделать Merge строки:
Я попробовал сделать конкатенацию, однако мне нужно именно собрать строку из букв.

def is_merge(s, part1, part2):
    if (part1+ part2 == s):
        return True
    else:
        return False

Как сделать сборку строки и сопоставление строки полученной из part1 и part2 и сопоставить её с исходной строкой s, при условии, что в строке могут встречаться пробелы.


Добавить комментарий

1 Ответы

Python Опубликовано 16.12.2018
0

Если перефразировать условие как «проверить, что первая строка состоит из тех же букв, что и 2 и 3 строки вместе взятые», то можно решить, например, отсортировав буквы:

def is_merge(s, part1, part2):
    return sorted(part1 + part2) == sorted(s)

Возможны и другие варианты решения, например посчитать сколько каких букв в каждой строке и сравнить:

from collections import Counter
 
def is_merge(s, part1, part2):
    return Counter(part1) + Counter(part2) == Counter(s)

Обновление. Если нужно сравнение без учета пробелов, можно перед сравнением отфильтровать из строк все кроме букв:

def is_merge(s, part1, part2):
    s, part1, part2 = (list(filter(str.isalpha, item)) for item in (s, part1, part2))
    return sorted(part1 + part2) == sorted(s)

Для второго варианта аналогично (причем не обязательно преобразовывать итератор, который вернул filter, в список):

from collections import Counter
 
def is_merge(s, part1, part2):
    s, part1, part2 = (filter(str.isalpha, item) for item in (s, part1, part2))
    return Counter(part1) + Counter(part2) == Counter(s)

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up