Problem Statement
Given a string of parentheses, we must turn it into a well formed string by changing as few characters as possible (we cannot delete or insert characters).
There are 3 kinds of parentheses: regular (), brackets [] and curly brackets {}. Each pair has an opening ('(', '[' and '{' respectively) and a closing (')', ']' and '}') character.
A well formed string of parentheses is defined by the following rules:
- The empty string is well formed.
- If s is a well formed string, (s), [s] and {s} are well formed strings.
- If s and t are well formed strings, the concatenation st is a well formed string.
As examples, "([{}])", "" and "(){}[]" are well formed strings and "([}]", "([)]" and "{" are malformed strings.
Given a
Definition
- Class:
- CorrectingParenthesization
- Method:
- getMinErrors
- Parameters:
- String
- Returns:
- int
- Method signature:
- int getMinErrors(String s)
- (be sure your method is public)
Notes
- Changing a character is selecting one position in the string and changing the character in that position to any other parentheses character.
Constraints
- s will have between 0 and 50 characters, inclusive.
- s will have an even number of characters.
- Each character of s will be '(', '[', '{', ')', ']' or '}'.
Examples
"([{}])()[]{}"
Returns: 0
This is already well formed.
"([)]"
Returns: 2
With two changes you can get "([])" (there are other ways with the same number of changes).
"([{}[]"
Returns: 1
Simply changing the second character will give you "(){}[]".
""
Returns: 0
"]["
Returns: 2
"()[]"
Returns: 0
"[(}][{}]"
Returns: 1
"((((([[[[[{{{{{}}}}}]]]]])))))"
Returns: 0
"}}}}}]]]]])))))((((([[[[[{{{{{"
Returns: 16
")()[]{}[]{}[]{}()["
Returns: 2
"){[}]("
Returns: 4
"}]"
Returns: 1
"([{]()"
Returns: 2
"(){}[})}){}]"
Returns: 2
"[]}({[[](([(]]})"
Returns: 5
"{})({])[]}})]{{})}{{)]"
Returns: 6
"{}({}(()[[[])}(]}}{]][[(]]"
Returns: 6
"[(]{)[}]]}})}{[[)}}]{[][[][{{[[}"
Returns: 9
")}[(({}}}}[{)}]])]]]()[]{[}[))}{}){)"
Returns: 11
"{}}{[(][]][}[]({(]{})[]]([[(})(][])][[{]{("
Returns: 11
"(]{]]]]}]){()(]}([)[((}[]])}{{{){{]{)))}(]((]]"
Returns: 14
"([{(({[{[[[{({((({{[([{{{)}}]}})}]}]])]])}})))])}]"
Returns: 9
"({{{[({([]}]})})))"
Returns: 4
"{[[((({{{(())))]]])))]"
Returns: 5
"}])}])])})}])}]]}])}])}]]{([[[{(([{{[({(([{[({[{{["
Returns: 26
"])])}}]}))}]}[{[[(([[{({(["
Returns: 14
"})]])]}]))})}]}]}}))}[{[{[[{{([[[([[({[[({"
Returns: 22
"[((({}{})()[]("
Returns: 2
"{[[()({)}[]){}][){}][)"
Returns: 5
"[([])]{}[]"
Returns: 0
"({}{}(])"
Returns: 1
"({{}{}(({[{}]]()[{{)}]]{}}](){](])[}()"
Returns: 7
"[((()[]]}()))]"
Returns: 1
"{([(]({}[))[){{}}[]}]])]]{}]){]}"
Returns: 5
"[(}([{((([])))}]))]()]"
Returns: 2
"(({}))"
Returns: 0
"{{([{}()([[]{[]{]())()])}{]}"
Returns: 2
"][((({(()][)])(}([({{}}))]()(){}{[([))()()))][{()]"
Returns: 10
"[]"
Returns: 0
"(}}[{)({[([{[][()({)}]}][{}({[({](])"
Returns: 9
"()[()([{}(()()()[]{}[[]]{}{})}()}])[]{}]{}"
Returns: 1
"[([{(}()[)]]){"
Returns: 4
"({[{{][{{{({[{{}()}{}][]})}[]}[](){{}]}()]})"
Returns: 2
"()"
Returns: 0
"{(([]}()[{}]](){}[]){){}"
Returns: 3
"{{}{([((()))][]{])}()}"
Returns: 1
"{](()[([{))[[]{]{}{}[(([}{}{)[[[]}{}]}(){()}[("
Returns: 9
"([]{[]])({[{}[]]})"
Returns: 1
"()[]{}[]{}[]{}[]}{}[]{}[]{})"
Returns: 1
"]]]]]]]]]]]]"
Returns: 6
"{{{{{{{{{{{{{{"
Returns: 7
"))))))))))))))))))))))))))))))))))))))))))))))))))"
Returns: 25
"({[[{([[{{{{(({(({{{{[[[{({{[{[(({[{{{[[[(((((((({"
Returns: 25
"{}{[(}}]()))[)(["
Returns: 5
")([}}{([{(({})}()(({}{)]}))}}]({]}"
Returns: 7
"}[[{{{][}(){}[][]}"
Returns: 4
"{[{({}{]]}{{}{}][(]{}])}]}[("
Returns: 4
"]}{][]{}][{[}][({{[{(}[})}()]{)}]}}["
Returns: 10
"})([)]()[}[](])]"
Returns: 5
"{}"
Returns: 0
"{{(()({](([((({({][]{[]]]){}}})[]{"
Returns: 8
"[]{[]{}([[]()[){}()}{}"
Returns: 1
"[{]]([]]}[[[[{[(]{{{[]]}[){[{())(]]{]]([)(}("
Returns: 13
"({}){{"
Returns: 1
"[[][][]((([]()())))(){}]"
Returns: 0
"{}({}]}){}()"
Returns: 1
"{]()"
Returns: 1
")()](][]()(()()]{()[))"
Returns: 4
")]({{}})})"
Returns: 2
"{{[{[[{}[][]}}"
Returns: 2
"({(([[[()(}]]]})()"
Returns: 2
"[{(([[}[([][]({{}{}{{({[[]}(](]}]{}}))}}}])(){})}]"
Returns: 7
"({}{[[]{}[][]}]]{}))()"
Returns: 2
"[]"
Returns: 0
"{[({}}[{{{}}}]]{}[])[}(["
Returns: 3
"[)"
Returns: 1
"{{)(}()}{}{((())({([)[{{}[}[)}]}]]([))}}"
Returns: 8
"()({}{}{"
Returns: 1
"}[}(][(){)}{]})}{}{}())]"
Returns: 6
"[[]([{}()][]"
Returns: 1
"[]))[]"
Returns: 1
"{{{[[{{}{}[{}}"
Returns: 3
")][(][]]()"
Returns: 2
")))(({}{}}{{{}}}})({}{}}}}}}{{{{)}())}{]}{(]))(((("
Returns: 13
"({[}[)]]({[}[)]]({[}[)]]({[}[)]]({[}[)]]({[}[)]]"
Returns: 15
")))((("
Returns: 4
")[]]{(()))){}}}{{[[]]]}([{]}{}}]][[(()[]])))}}}["
Returns: 9
"]]]]"
Returns: 2
"(((((]]]{]}{{]]]]{{{{))[[{{{))(({]"
Returns: 13
"([{}])()[]{}(((}}}}}}][]{])((}}}{}][][()()}}))))"
Returns: 9
"{([}"
Returns: 1
"[{}]}}}}}}"
Returns: 3
"][{{"
Returns: 3
"(}){(}({))(}{(){(}(([][][(][])((()[][][](((}"
Returns: 11
")[{{))]("
Returns: 4
"([{}[]([{}[]([{}[]([{}[]([{}[]([{}[]([{}[]([{}[]]]"
Returns: 8
"((({[{]}}]]]"
Returns: 4
"}}}}}}])])}])])}])])}])])}])])}])])}])])}])])}]}"
Returns: 24
"(((((]]]{]}{{]]]]{{{{))[[{{{))(({](((]]{"
Returns: 16
"(}{([]){][){()[]]}})({}[]]])(][{}}{{})({}){[])[](]"
Returns: 10
"((((((((((([})))))))))))([[[[[[[[[]]]]]]]]]}"
Returns: 2
"({(((((((((((((((((}}}}}}}}}}}}}}}}}[[[[}(}((}"
Returns: 22
"((({[[]})[{]]}"
Returns: 4
"())){[[[[}()))((({][[[[]"
Returns: 8
"[({]})"
Returns: 2
")("
Returns: 2
"]]][[["
Returns: 4
"([{}[])))))]"
Returns: 3
"]["
Returns: 2
"([{}])()[]{}([{}])()[]{}([{}])()[]{}[}[](}{}{]}]"
Returns: 3
"}}}}"
Returns: 2
"(({[))}]"
Returns: 2
"][][(((((((()))))}}}}}[[[[[[[}}}]]]]]]]]]]}}{{{{"
Returns: 10
"))}})}[[}())]{])]({[{[({}}{(())[)[{})]][){({{({]"
Returns: 14
"{{{{"
Returns: 2
"([{}[()]{(}){}[[))}}{{"
Returns: 5
"{}({[[}){(][({}{))({[}{)"
Returns: 6
"{)})"
Returns: 2
"((]))()(([))"
Returns: 2
")}[](){{{]])(){{}))))]"
Returns: 7
"[{](})"
Returns: 3
"[([{]})]"
Returns: 2