Проверить возможность получить одну строку из другой

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