i превращает подстроку rule_from[i] в rule_to[i] (той же длины) и стоит rule_cost[i]. Одно и то же правило можно применять сколько угодно раз; одинаковые пары с разной ценой тоже возможны.
Нужно превратить строку start в строку goal той же длины. Каждая замена применяется к какому-то участку текущей строки. Любые два применённых участка должны либо не пересекаться вовсе, либо совпадать полностью — то есть один и тот же участок можно переписывать несколько раз подряд, а частично перекрывающиеся участки запрещены.
Верните наименьшую суммарную стоимость превращения или -1, если это невозможно.start="cat", goal="cot", rule_from=["a", "e"], rule_to=["e", "o"], rule_cost=[2, 3] → 5
Прямого правила a → o нет, но букву можно переписать дважды на одном месте: a → e за 2, затем e → o за 3. Итого 5.
start="abcd", goal="xycd", rule_from=["ab", "a", "b"], rule_to=["xy", "x", "y"], rule_cost=[5, 1, 1] → 2
Выгоднее заменить буквы по отдельности: a → x и b → y за 1 + 1 = 2, чем фрагмент ab целиком за 5.
start="aaa", goal="bbb", rule_from=["aa"], rule_to=["bb"], rule_cost=[1] → -1
Правило меняет только пару букв. Покрыть три позиции парами можно лишь с пересечением, а пересекающиеся участки запрещены — ответ -1.
start="cat", goal="cot", rule_from=["a", "e"], rule_to=["e", "o"], rule_cost=[2, 3]
5
«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 58 тестов на сервере, включая скрытые.