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