목표 : 괄호 문자열이 주어지면 입력 문자열을 괄호가 균형을 이루는 문자열로 바꾸는 데 필요한 최소 Damerau-Levenshtein 거리를 출력합니다 .
입력
입력 문자열은 대괄호 만 포함하고 다른 문자는 포함하지 않습니다. 즉,의 문자를 조합 한 것입니다 (){}[]<>
. 문자열 또는 문자 배열로 입력 할 수 있습니다. 입력 문자열에 대해 다른 가정을 할 수 없습니다. 언어가 지원하는 최대 크기까지 임의로 길거나 비어 있거나 대괄호가 이미 균형을 이룰 수 있습니다.
Damerau-Levenshtein 거리
Damerau-Levenshtein 두 문자열 사이의 거리는 두 개의 인접한 문자의 삽입, 삭제, 단일 문자 대체 및 전치 (스와핑)의 최소 수입니다.
산출
출력은 입력 문자열과 대괄호가 일치하는 문자열 사이의 최소 Damerau-Levenshtein 거리 여야합니다. 결과는 균형 잡힌 문자열이 아닌 숫자 여야 합니다.
여는 괄호와 닫는 괄호가 올바른 순서이고 괄호 안에 문자가없는 경우 괄호 쌍은 "일치하는"것으로 간주됩니다.
()
[]{}
또는 내부의 모든 하위 요소도 일치하는 경우
[()()()()]
{<[]>}
(()())
하위 요소는 여러 층으로 중첩 될 수도 있습니다.
[(){<><>[()]}<>()]
<[{((()))}]>
(정의를 위해 @DJMcMayhem에게 감사합니다)
테스트 사례
Input Possible Balanced Output
Empty Empty 0
[](){}<> [](){}<> 0
[(){}<> [(){}<>] 1
[(]) []() 1
[[[[[[[[ [][][][] 4
(](<>}[>(}>><(>(({}] ()(<>)[(<><>){}] 7
>]{])< []{()} 3
([)}}>[ (){}<> 4
{<((<<][{{}>[<) <>(<<[]>{}>[]) 5
{><({((})>}}}{(}} {<><({()})>}{}{()} 4
(](<)>}[>(}>>{]<<(]] (<()<><<>()>>[])<()> 9
}})( {}() 2
(테스트 사례의 절반을 해결해 주신 @WheatWizard에게 감사드립니다)
이것은 code-golf 이며 가장 적은 바이트 수입니다!
제출물은 테스트 가능해야합니다. 즉, 각 테스트 사례에 대한 결과가 1 시간 이내에 출력되어야합니다.
[<>]
또는 []<>
또는<>