Разбор задачи: Сортировка символов по частоте

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

 from collections import Counter

# Решение задачи
def frequency_sort(s):
    # Подсчет частот символов
    freq = Counter(s)
    # Сортировка символов по частоте и затем по порядку появления в строке
    sorted_chars = sorted(freq.keys(), key=lambda x: (-freq[x], x))
    # Построение результирующей строки
    return ''.join(char * freq[char] for char in sorted_chars)

Данная функция сортирует строку по частотам символов, а при равной частоте символы располагаются в алфавитном порядке. Рассмотрим решение пошагово.


1. Импорт необходимых модулей

from collections import Counter

Для подсчета частот символов используется класс Counter из модуля collections. Он позволяет быстро создать словарь, где ключи — это символы строки, а значения — их частоты.


2. Определение функции

def frequency_sort(s):

Функция принимает строку s, которая может содержать повторяющиеся символы. Задача состоит в том, чтобы отсортировать символы этой строки по частотам.


3. Подсчет частот символов

freq = Counter(s)

С помощью Counter(s) создается словарь freq, в котором каждому символу строки соответствует количество его появлений. Например, если s = "tree", то freq будет следующим:

{'t': 1, 'r': 1, 'e': 2}

4. Сортировка символов

sorted_chars = sorted(freq.keys(), key=lambda x: (-freq[x], x))

Сортировка происходит следующим образом:

  1. freq.keys() возвращает все символы из словаря частот.
  2. key=lambda x: (-freq[x], x) задает порядок сортировки:
    • Символы сортируются по убыванию частоты (-freq[x]).
    • При равных частотах символы сортируются в алфавитном порядке (x).

Например, для строки "tree" порядок сортировки символов будет таким:
['e', 'r', 't'].


5. Построение результирующей строки

return ''.join(char * freq[char] for char in sorted_chars)

На этом шаге формируется результирующая строка:

  • Для каждого символа из отсортированного списка sorted_chars символ повторяется столько раз, сколько указано в freq[char].
  • Все части соединяются в одну строку с помощью join.

Пример:
Если sorted_chars = ['e', 'r', 't'] и freq = {'t': 1, 'r': 1, 'e': 2}, то итоговая строка будет сформирована как:
'e' * 2 + 'r' * 1 + 't' * 1 = "eert".


Пример работы функции

Вход:
s = "tree"

  1. freq = {'t': 1, 'r': 1, 'e': 2}
  2. sorted_chars = ['e', 'r', 't']
  3. Результат: "eert"

Выход:
"eert"

 



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