#Z0910701. 正则括号序列

正则括号序列

题目描述

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

  1. 空序列是一个普通的括号序列。
  2. 如果s是正则括号序列,则(s)和[s]是正则括号序列。
  3. 如果a和b是正则括号序列,则ab是正则括号序列。
  4. 没有其他序列是正则括号序列

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

给定一个字符括号序列a1a2ana_1a_2…a_n,您的目标是找到s的子序列中最长的正则括号序列的长度。也就是说,您希望找到最大的m,使得对于索引i1,i2imi_1, i_2,…,i_m,其中1i1<i2<<imn1≤i_1 < i_2 <…< i_m≤n, ai1ai2aima_{i1}a_{i2}…a_{im}是一个正则括号序列。

例如给定初始序列[([]])],最长的正则括号子序列为[([])],其长度是6。

输入格式

输入测试文件将包含多个测试用例。每个输入测试用例由单行组成,仅包含字符(,),[和];每个输入测试的长度在1到100之间。文件结束由包含单词“end”的一行标记,不应进行处理。

输出格式

对于每个输入情况,程序应该在一行上打印出最长的正则括号子序列的长度。

((()))
()()()
([]])
)[)(
([][]()
end
6
6
4
0
6

源poj2955