Программа курса:
Разбор задачи: Пользовательская строка сортировки
Предложенный нами код:
def customSortString(order: str, s: str) -> str:
# Создаем словарь для хранения порядка символов из order
order_map = {char: idx for idx, char in enumerate(order)}
# Упорядочиваем строку s, используя ключи из order_map, символы отсутствующие в order идут в конце
sorted_s = ''.join(sorted(s, key=lambda char: order_map.get(char, float('inf'))))
return sorted_sВ данной задаче нам нужно упорядочить символы строки s в соответствии с пользовательским порядком символов, заданным строкой order. Рассмотрим решение подробно.
Шаг 1: Создание словаря порядка символов
order_map = {char: idx for idx, char in enumerate(order)}
Что здесь происходит?
- Мы создаем словарь, где каждому символу из строки
orderсопоставляем его индекс. Например, если
order = "cba", тоorder_mapбудет:{'c': 0, 'b': 1, 'a': 2}- Этот словарь позволяет нам быстро узнать приоритет символа в пользовательском порядке.
Шаг 2: Упорядочивание строки s
sorted_s = ''.join(sorted(s, key=lambda char: order_map.get(char, float('inf'))))
Что здесь происходит?
- Функция
sortedсортирует символы строкиs. В качестве ключа для сортировки (
key) используетсяlambda-функция:lambda char: order_map.get(char, float('inf'))char— текущий символ из строкиs.order_map.get(char, float('inf'))возвращает приоритет символа из словаряorder_map. Если символ отсутствует вorder, ему присваивается приоритетfloat('inf'), чтобы такие символы оказались в конце.
- Например, если
order = "cba"иs = "abcd", то:- Символ
'a'имеет приоритет2. - Символ
'b'имеет приоритет1. - Символ
'c'имеет приоритет0. - Символ
'd'не присутствует вorder, поэтому получает приоритетfloat('inf').
- Символ
- Результат сортировки:
['c', 'b', 'a', 'd']. - Затем
''.join(...)соединяет отсортированные символы в строку.
Шаг 3: Возврат результата
return sorted_s
Строка, упорядоченная в соответствии с order, возвращается в качестве результата.
Пример выполнения
Пример 1:
order = "cba"
s = "abcd"
order_map:{'c': 0, 'b': 1, 'a': 2}- Приоритеты символов строки
s:'a'→2'b'→1'c'→0'd'→float('inf')
- После сортировки:
['c', 'b', 'a', 'd']. - Результат:
"cbad".
Пример 2:
order = "bcafg"
s = "abcd"
order_map:{'b': 0, 'c': 1, 'a': 2, 'f': 3, 'g': 4}- Приоритеты символов строки
s:'a'→2'b'→0'c'→1'd'→float('inf')
- После сортировки:
['b', 'c', 'a', 'd']. - Результат:
"bcad".
Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии