Ctrl K

Расстановки по подъёмам и спускам

Сложная
Дана строка pattern длины n из букв I и D. Нужно выстроить в ряд все целые числа от 0 до n, каждое ровно один раз, так чтобы ряд следовал шаблону: если pattern[i] равно I, число на позиции i + 1 больше числа на позиции i, а если D — меньше. Сколько существует таких расстановок? Ответ может быть очень большим, поэтому верните его остаток от деления на 10⁹ + 7.
Пример 1
pattern='ID' → 2

Нужны три числа 0, 1, 2, где второе больше соседей: подходят только (0, 2, 1) и (1, 2, 0).

Пример 2
pattern='DDI' → 3

Первые три числа убывают, а последнее больше третьего. Третье число обязано быть 0, и подходят (3, 2, 0, 1), (3, 1, 0, 2) и (2, 1, 0, 3).

Пример 3
pattern='III' → 1

Каждое следующее число больше предыдущего — подходит только порядок по возрастанию.

Ограничения
  • 1 ≤ pattern.length ≤ 200
  • pattern[i] — это I или D
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиКовры на белой плитке СложнаяЗалипающие клавиши СложнаяПрыжки по целым плиткам СредняяПроверка трёх зданий СредняяШаблон с точкой и звёздочкой Сложная
загружаем Python…
Вход
pattern='ID'
Ожидается
2

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 250 тестов на сервере, включая скрытые.