本题和 921.Minimum-Add-to-Make-Parentheses-Valid 本质相同,都是贪心的思想。只不过921只需要统计删除(或者增加)括号的个数,本题需要具体的把增删的位置指出来。
具体的说,依然是用一个变量count来表示unmatched left parenthesis。当统计到count<0的时候,意味着必须删除一个右括号,否则无论之后的字符串如何表现,当前的字符串永远不可能合法。那么删除哪个右括号呢?注意,其实可以有多个选择,但是本题只要输出一种,那么最简单的方法就是把当前的那个右括号删了。
当遍历完所有的字符,如果最后count>0,说明有未被匹配的左括号。此时意味着我们必须删除这些左括号。那么如何知道是哪些左括号未被匹配呢?显然,我们可以一开始使用栈来标记左括号的匹配情况,那么one pass之后栈里剩下的那些左括号就可以放心删除了。