#P2955. Brackets

    ID: 1956 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>动态规划数据结构区间DPStanford Local 2004

Brackets

题目描述

我们给出“正则括号序列”的如下归纳定义:

  1. 空序列是一个正则括号序列;
  2. 如果ss是一个正则括号序列,那么(s)[s]也是正则括号序列;
  3. 如果ab都是正则括号序列,那么ab也是正则括号序列;
  4. 其他序列都不是正则括号序列。

例如,以下字符序列都是正则括号序列:
(), [], (()), ()[], ()[()]

而以下字符序列不是:
(, ], )(, ([)], ([(]

给定一个由字符a1a2 … an组成的括号序列,你的目标是找到s的最长正则括号子序列的长度。也就是说,你需要找到最大的m,使得存在下标i1, i2, …, im(满足1 ≤ i1 < i2 < … < im ≤ n),使得子序列ai1ai2 … aim是一个正则括号序列。

例如,初始序列为([([]])]时,最长正则括号子序列是[([])]

输入格式

输入文件包含多个测试用例。每个测试用例占一行,仅包含字符()[];每个测试用例的长度在1到100之间(含)。输入结束的标志是一行单独的“end”,程序不应处理这一行。

输出格式

对于每个测试用例,程序应在一行中输出最长可能正则括号子序列的长度。

示例输入

((()))
()()()
([]])
)[)(
([][][)
end

示例输出

6
6
4
0
6

来源

Stanford Local 2004