Программа курса:
Разбор задачи: Совпадение DI строк
Предложенный нами код решения:
def diStringMatch(s):
"""
Возвращает перестановку чисел, соответствующую строке s.
:param s: строка, состоящая из символов 'I' и 'D'
:return: список чисел, соответствующий заданным условиям
"""
# Инициализируем минимальное и максимальное возможные значения
low, high = 0, len(s)
perm = []
# Проходим по строке и формируем список
for char in s:
if char == 'I': # Если 'I', выбираем минимальное значение
perm.append(low)
low += 1
else: # Если 'D', выбираем максимальное значение
perm.append(high)
high -= 1
# Добавляем оставшееся число
perm.append(low)
return perm
def diStringMatch(s):- Это заголовок функции. Функция называется
diStringMatchи принимает один аргументs. - Аргумент
s— это строка, состоящая из символов'I'и'D'.
- Это заголовок функции. Функция называется
Инициализация переменных:
low, high = 0, len(s) perm = []lowустанавливается в 0, аhigh— в длину строкиs. Это будут две границы чисел, из которых мы будем выбирать значения для перестановки.perm— это пустой список, в который мы будем добавлять числа перестановки.
Цикл
forпо строкеs:for char in s:- Этот цикл последовательно перебирает каждый символ строки
s.
- Этот цикл последовательно перебирает каждый символ строки
Условие
if char == 'I'::if char == 'I': # Если 'I', выбираем минимальное значение perm.append(low) low += 1- Если текущий символ равен
'I', это означает, что текущее число должно быть меньше следующего. - Мы добавляем в
permтекущее минимальное значение (low) и увеличиваемlowна 1, чтобы оно больше не использовалось.
- Если текущий символ равен
else:else: # Если 'D', выбираем максимальное значение perm.append(high) high -= 1- Если текущий символ равен
'D', это означает, что текущее число должно быть больше следующего. - Мы добавляем в
permтекущее максимальное значение (high) и уменьшаемhighна 1.
- Если текущий символ равен
Добавление последнего элемента:
perm.append(low)- После того как все символы строки обработаны, остается одно неиспользованное число.
- Это число равно
low(илиhigh, так как на этом этапе они равны). Мы добавляем его в конец спискаperm.
Возврат результата:
return perm- Функция возвращает сформированный список
perm, который является одной из возможных перестановок, соответствующих строкеs.
- Функция возвращает сформированный список
Пример работы кода
Вход:s = "IDID"
Ход выполнения:
- Инициализация:
low = 0,high = 4,perm = [] - Символ
'I':- Добавляем
low = 0, увеличиваемlowдо 1. perm = [0]
- Добавляем
- Символ
'D':- Добавляем
high = 4, уменьшаемhighдо 3. perm = [0, 4]
- Добавляем
- Символ
'I':- Добавляем
low = 1, увеличиваемlowдо 2. perm = [0, 4, 1]
- Добавляем
- Символ
'D':- Добавляем
high = 3, уменьшаемhighдо 2. perm = [0, 4, 1, 3]
- Добавляем
- Добавление последнего числа:
- Добавляем оставшееся значение
low = 2. perm = [0, 4, 1, 3, 2]
- Добавляем оставшееся значение
Вывод:
Функция возвращает [0, 4, 1, 3, 2].
Код строит результат посимвольно, что позволяет следовать условиям строки s без необходимости сложных вычислений или проверок.
Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии