您是项目经理。有一天,您的一名程序员发疯了(不是您的错),并在代码库中提取了所有表达式,并在其中添加了随机括号,然后当场退出,对您的不称职(也不是您的错)表示愤慨。这将是一个简单的修复,但是由于某种原因,您没有使用修订控制(完全不是您的错)。出于某种原因,其他程序员都不想遍历每个表达式来修正不匹配的括号(顺便说一句,这不是您的错)。这些天的程序员,您自己想。您将必须自己做。惊恐的事件!这样的任务本该在你下面...
输入将是一行,其中将包含多个左括号(( [ {
)和右括号() ] }
)。它还可能但不总是包含注释(/* */
)和字符串文字(" "
或' '
)以及各种数字,字母或符号。
至少会有一个括号(在注释或字符串文字之外)没有相反的对应关系(在注释或字符串文字之外)。例如,}
没有{
先验的错误。另一个例子:一个(
没有)
事后的。您的程序将以空格替换使括号匹配所需的最小括号数。
例子:
(4 + (2 + 3))]
==> (4 + (2 + 3))
(末尾方括号)
][][[]]
==> [][[]]
(开始方括号)
("Hel(o!"))
==> ("Hel(o!")
(末尾括号)
( /* )]*/
==> /* )]*/
(末尾括号)
{()]
==> ()
(大括号和方括号)
- 可以从最方便的方式(STDIN,命令行参数,从文件读取等)获取输入。
- 如果使用相同的清除次数来解决不匹配问题的方法不止一种,则可以接受。
- 括号中只会有不匹配的内容。字符串文字和注释将始终正确形成。
- 标题来自此SO线程
- 注释中永远不会有任何报价,报价中的报价,注释中的注释或报价中的注释。
这是代码高尔夫,因此最少的字节数获胜。如果规范不明确,请在注释中提出问题。
("foo (\") bar")
)?
{{(})
应该是{ }
或相等的,因为开头的情况意味着代码从头开始工作,并且{(})
在我所知道的每种编程语言中都被视为不匹配的括号(即“导致停滞”)。但是,那时我已经写了一个答案,所以我有偏见。