#P2955. Brackets
Brackets
题目描述
我们给出“正则括号序列”的如下归纳定义:
- 空序列是一个正则括号序列;
- 如果是一个正则括号序列,那么
(s)
和[s]
也是正则括号序列; - 如果
a
和b
都是正则括号序列,那么ab
也是正则括号序列; - 其他序列都不是正则括号序列。
例如,以下字符序列都是正则括号序列:
(), [], (()), ()[], ()[()]
而以下字符序列不是:
(, ], )(, ([)], ([(]
给定一个由字符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