有人给了我们一个字符串,但所有类似方括号的字符都已更改为普通字符,我们不知道是哪一个,甚至不知道有多少个。我们所知道的是,如果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也可以接受,对吧?