有人给了我们一个字符串,但所有类似方括号的字符都已更改为普通字符,我们不知道是哪一个,甚至不知道有多少个。我们所知道的是,如果L1,L2,L3,...,LN
是不同种类的左括号和R1,R2,R3,...,RN
不同种类的相应右括号,它们都是不同的(2N个不同的括号字符),则字符串是有效的,前提是它是其中的一个(+是普通字符串串联):
L1+X+R1
,,L2+X+R2
...,,LN+X+RN
哪里X
是有效的字符串,X+Y
,其中X
和Y
是有效字符串,不是方括号字符的任何单个字符。
空字符串
我们知道,在更改括号之前,它们以有效的字符串开头,并且没有将其更改为字符串中已经存在的任何字符。每个支架也至少存在一对。您可以重构哪些字符最初是左括号和右括号对(找到Li
和Ri
遵循给定条件)?
输出括号内的字符对。例如,如果(){}[]
实际上是方括号字符,则可能输出(){}[]
或{}[]()
或[](){}
等。对于字符串,可能有多种方式执行此操作,您只需要返回一个,这样就不会有带有更多对的方括号分配(请参见示例)。请注意,输出字符串应始终具有偶数长度。
例子:
abcc
- c
不能为方括号,因为没有其他字符出现两次,但ab
可以为方括号对,因此您将精确输出ab
。
fffff
-任何最多包含一个字符的字符串都不能带有方括号,因此您将返回空字符串或不输出任何内容。
aedbedebdcecdec
-该字符串不能有任何括号,因为有1 a,2 bs,3 cs,4 ds和5 es,因此两个字符不会出现相同的次数,这是必须有括号的。
abcd
-可能的分配是ab
,cd
,abcd
,cdab
,adbc
,bcad
,ac
,ad
,bc
和bd
,(以及空分配,其中所有的人都有),但你必须返回最长的任务之一,所以你必须返回abcd
,cdab
,adbc
,或bcad
。
aabbcc
,abc
-这些都有ab
,ac
和bc
为有效对。您必须返回这些对中的一个,无论哪一个都没有关系。
abbac
-a和b具有相同的字符数,但是它们实际上不能工作,因为其中一个出现在所有其他出现的左侧和右侧。什么也没返回。
aabcdb
- cd
和ab
是精确的两个括号对,因此输出cdab
或abcd
。
abcdacbd
-只有一对可以立即实现,但是ab
,ac
,bd
,cd
,和ad
都可能对你可以退货。无论选择哪个对,都有一个实例,其中有一个其他字符,它禁止任何其他对,除非是的情况下ad
,其中的其他对bc
和cb
也不能单独出现,因此不可能与ad
。
这是代码高尔夫,因此以字节为单位的最短代码获胜。如果可能的话,来自STDIN的输入。如果不可能,请在答案中指出输入法。
abcd
,输出adbc
也可以接受,对吧?