平衡字符串是一串括号,()
因此每个括号都可以与另一个匹配。更严格地说,它们是该语法所涵盖的字符串:
S → (S)S | ε
我们可以通过以下方式将字符串“由内而外”:
开关的所有事件
(
,并)
互相将字符从字符串的前面移到后面,直到再次平衡为止。
让我们举个例子。
我们从平衡的字符串开始:
(()(())())
然后我们切换括号
))())(()((
然后将字符从字符串的开头移到字符串的后面,直到字符串平衡为止。
))())(()((
)())(()(()
())(()(())
))(()(())(
)(()(())()
(()(())())
那就是我们的结果!
请注意,有些字符串可以用多种方式内翻,例如字符串
(()())
从里到外可以是:
()(())
要么
(())()
但是,每个字符串至少都有一个解决方案。
任务
编写一个程序,以平衡的字符串作为输入并输出,该字符串由内而外。如果可能有多个有效输出,则只需要输出其中之一即可。您可以使用不同的支柱型(<>
,[]
或{}
),如果你愿意的话。
这是一场代码高尔夫竞赛,因此您应力求最大程度地减少以字节为单位的源代码大小。
测试用例
(()()) -> ()(()), (())()
(()(())()) -> (()(())())
((())())() -> (()(()()))