目的:ブラケットの文字列を指定し、入力文字列をブラケットのバランスが取れた文字列に変換するために必要な最小のダメラウ-レーベンシュタイン距離を出力します。
入力
入力文字列には括弧のみが含まれ、他の文字は含まれません。つまり、の任意の文字の組み合わせです(){}[]<>
。入力は、文字列または文字の配列として取得できます。入力文字列について他の仮定を行うことはできません。任意の長さ(言語でサポートされている最大サイズまで)、空の場合、ブラケットのバランスがすでに取れている場合などがあります。
ダメラウ-レーベンシュタイン距離
2つの文字列間のDamerau-Levenshtein Distanceは、2つの隣接する文字の挿入、削除、単一文字の置換、および転置(スワップ)の最小数です。
出力
出力は、入力文字列と角かっこが一致する文字列との間の最小Damerau-Levenshtein Distanceである必要があります。出力は、結果のバランスの取れた文字列ではなく、数値でなければなりません。
次のように、開始ブラケットと終了ブラケットが正しい順序であり、中に文字がない場合、一対のブラケットは「一致」とみなされます。
()
[]{}
または、その中のすべてのサブ要素も一致する場合。
[()()()()]
{<[]>}
(()())
サブ要素は、いくつかのレイヤーの深さにネストすることもできます。
[(){<><>[()]}<>()]
<[{((()))}]>
(定義については@DJMcMayhemに感謝します)
テストケース
Input Possible Balanced Output
Empty Empty 0
[](){}<> [](){}<> 0
[(){}<> [(){}<>] 1
[(]) []() 1
[[[[[[[[ [][][][] 4
(](<>}[>(}>><(>(({}] ()(<>)[(<><>){}] 7
>]{])< []{()} 3
([)}}>[ (){}<> 4
{<((<<][{{}>[<) <>(<<[]>{}>[]) 5
{><({((})>}}}{(}} {<><({()})>}{}{()} 4
(](<)>}[>(}>>{]<<(]] (<()<><<>()>>[])<()> 9
}})( {}() 2
(テストケースの半分を解決してくれた@WheatWizardに感謝)
これはcode-golfで、最少バイトが勝ちます!
提出物はテスト可能でなければなりません。つまり、テストケースごとに1時間以内に結果を出力する必要があります。
[<>]
か、[]<>
または<>