Разбор задачи: Пользовательская строка сортировки

Предложенный нами код:

 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)}

Что здесь происходит?

  1. Мы создаем словарь, где каждому символу из строки order сопоставляем его индекс.
  2. Например, если order = "cba", то order_map будет:

    {'c': 0, 'b': 1, 'a': 2}
    
  3. Этот словарь позволяет нам быстро узнать приоритет символа в пользовательском порядке.

Шаг 2: Упорядочивание строки s

sorted_s = ''.join(sorted(s, key=lambda char: order_map.get(char, float('inf'))))

Что здесь происходит?

  1. Функция sorted сортирует символы строки s.
  2. В качестве ключа для сортировки (key) используется lambda-функция:

    lambda char: order_map.get(char, float('inf'))
    
    • char — текущий символ из строки s.
    • order_map.get(char, float('inf')) возвращает приоритет символа из словаря order_map. Если символ отсутствует в order, ему присваивается приоритет float('inf'), чтобы такие символы оказались в конце.
  3. Например, если order = "cba" и s = "abcd", то:
    • Символ 'a' имеет приоритет 2.
    • Символ 'b' имеет приоритет 1.
    • Символ 'c' имеет приоритет 0.
    • Символ 'd' не присутствует в order, поэтому получает приоритет float('inf').
  4. Результат сортировки: ['c', 'b', 'a', 'd'].
  5. Затем ''.join(...) соединяет отсортированные символы в строку.

Шаг 3: Возврат результата

return sorted_s

Строка, упорядоченная в соответствии с order, возвращается в качестве результата.


Пример выполнения

Пример 1:

order = "cba"
s = "abcd"
  1. order_map:

    {'c': 0, 'b': 1, 'a': 2}
    
  2. Приоритеты символов строки s:
    • 'a'2
    • 'b'1
    • 'c'0
    • 'd'float('inf')
  3. После сортировки: ['c', 'b', 'a', 'd'].
  4. Результат: "cbad".

Пример 2:

order = "bcafg"
s = "abcd"
  1. order_map:

    {'b': 0, 'c': 1, 'a': 2, 'f': 3, 'g': 4}
    
  2. Приоритеты символов строки s:
    • 'a'2
    • 'b'0
    • 'c'1
    • 'd'float('inf')
  3. После сортировки: ['b', 'c', 'a', 'd'].
  4. Результат: "bcad".

 



Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии