[题目记录]括号序列(Brackets Sequence)

该博客探讨了如何通过添加最少数量的括号来使非正规括号序列变得正规。提出了递推算法来解决这个问题,并强调了在实现程序时的状态枚举顺序对于效率的重要性。
摘要由CSDN通过智能技术生成

定义如下正规括号序列(字符串):

  • 空序列是正规括号序列。
  • 如果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是否满足第一条,都要尝试第二种转移,否则“[][]”会转移到“][”,然后就 只能加两个括号了。

  当然,上述“方程”只是概念上的,落实到程序时要改成子串在原串中的起始点下

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值