定义如下正规括号序列(字符串):
- 空序列是正规括号序列。
- 如果S是正规括号序列,那么(S)和[S]也是正规括号序列。
- 如果A和B都是正规括号序列,那么AB也是正规括号序列。
例如,下面的字符串都是正规括号序列:(),[],(()),([]),()[],()[()],而如下字符串 则不是正规括号序列:(,[,],)(,([()。
输入一个长度不超过100的,由“(”、“)”、“[”、“]”构成的序列,添加尽量少的括号,得 到一个规则序列。如有多解,输出任意一个序列即可。
[分析]
设串S至少需要增加d(S)个括号,转移如下:
- 如果S形如(S′)或者[S′],转移到d(S′)。
- 如果S至少有两个字符,则可以分成AB,转移到d(A)+d(B)。
边界是:S为空时d(S)=0,S为单字符时d(S)=1。注意(S′, [S′, ) S′之类全部属于第二种转 移,不需要单独处理。
注意:不管S是否满足第一条,都要尝试第二种转移,否则“[][]”会转移到“][”,然后就 只能加两个括号了。
当然,上述“方程”只是概念上的,落实到程序时要改成子串在原串中的起始点下