7. Проверить возможность получить одну строку из другой
Условие задачи:
Написать функцию, которая возвращает True или False на вопрос можно ли получить из первой строки вторую?
Дополнительно:
Добавить проверку на количество символов
Спойлеры к решению
Подсказки
- Нужно проверить, хватает ли символов первой строки для составления второй строки.
- Важно учитывать не только наличие символа, но и его количество.
- Например, из строки
"abc"нельзя получить"aa", потому что буква"a"есть только один раз. - Для подсчёта символов удобно использовать
Counter. - Если длина второй строки больше длины первой, сразу можно вернуть
False.
Решение
from collections import Counter
def can_make_string(source: str, target: str) -> bool:
if len(target) > len(source):
return False
source_counter = Counter(source)
target_counter = Counter(target)
for char, count in target_counter.items():
if source_counter[char] < count:
return False
return True
Пример использования:
print(can_make_string("abc", "cab")) # True
print(can_make_string("aabbcc", "abc")) # True
print(can_make_string("abc", "aa")) # False
print(can_make_string("abc", "abcd")) # False
print(can_make_string("", "a")) # False
print(can_make_string("abc", "")) # True
Функция проверяет, можно ли составить вторую строку из символов первой строки.
Проверяется не только сам факт наличия символов, но и их количество. Например, если во второй строке две буквы "a", то в первой строке тоже должно быть минимум две буквы "a".
Если нужно получить вторую строку строго из всех символов первой строки без остатка, тогда проверку длины можно сделать строгой:
if len(source) != len(target):
return False