Ваша цель: Учитывая строку скобок, выведите минимальное расстояние Дамерау-Левенштейна, необходимое для преобразования входной строки в строку, в которой скобки сбалансированы.
вход
Входная строка будет содержать только скобки и никаких других символов. То есть это комбинация любых символов в (){}[]<>
. Вы можете принять ввод в виде строки или массива символов. Вы не можете делать какие-либо другие предположения относительно входной строки; он может быть произвольно длинным (до максимального размера, поддерживаемого вашим языком), он может быть пустым, скобки уже могут быть сбалансированы и т. д.
Дамерау-Левенштейн Расстояние
Расстояние Дамерау-Левенштейна между двумя строками - это минимальное количество вставок, удалений, односимвольных подстановок и транспозиций (перестановок) двух соседних символов.
Выход
Выходными данными должно быть минимальное расстояние Дамерау-Левенштейна между входной строкой и строкой, в которой сопоставляются скобки. Вывод должен быть числом , а не полученной сбалансированной строкой.
Пара скобок считается "совпавшей", если открывающая и закрывающая скобки расположены в правильном порядке и в них нет символов, например
()
[]{}
Или если каждый подэлемент внутри него также совпадает.
[()()()()]
{<[]>}
(()())
Подэлементы также могут быть вложены в несколько слоев.
[(){<><>[()]}<>()]
<[{((()))}]>
(Спасибо @DJMcMayhem за определение)
Тестовые случаи
Input Possible Balanced Output
Empty Empty 0
[](){}<> [](){}<> 0
[(){}<> [(){}<>] 1
[(]) []() 1
[[[[[[[[ [][][][] 4
(](<>}[>(}>><(>(({}] ()(<>)[(<><>){}] 7
>]{])< []{()} 3
([)}}>[ (){}<> 4
{<((<<][{{}>[<) <>(<<[]>{}>[]) 5
{><({((})>}}}{(}} {<><({()})>}{}{()} 4
(](<)>}[>(}>>{]<<(]] (<()<><<>()>>[])<()> 9
}})( {}() 2
(Спасибо @WheatWizard за решение половины тестовых случаев)
Это код-гольф , побеждает меньше байтов!
Ваши материалы должны быть тестируемыми, то есть они должны выводить результат для каждого теста в течение не более часа.
[<>]
и []<>
или<>