#AG0505006. 规则的括号序列

规则的括号序列

题目描述

我们定义一个字符串序列为“规则的括号序列”当且仅当它满足如下条件:

  1. 空字符串是规则的括号序列;
  2. 如果字符串 s 是一个规则的括号序列,那么 (s)[s] 也是规则的括号序列;
  3. 如果字符串 ab 都是规则的括号序列,那么 ab 也是规则的括号序列;
  4. 除此之外的字符串都不能称为规则的括号序列。

举个例子,下面的这些字符串都是规则的括号序列:

(), [], (()), ()[], ()[()]

与此同时,下面的这些字符串都不是规则的括号序列:

(, ], )(, ([)], ([(]

给你一个字符串 a1a2ana_1a_2 \cdots a_n,你的任务是找到它的最长的一个满足“规则的括号序列”条件的子序列,并输出该最长规则括号子序列的长度。也就是说,你需要找到最长的一组下标 i1,i2,,imi_1,i_2, \cdots ,i_m,他们满足 1i1<i2<<imn1 \le i_1 \lt i_2 \lt \cdots \lt i_m \le n,同时 ai1ai2aima_{i_1} a_{i_2} \cdots a_{i_m} 是规则的括号序列。
比如,给你一个字符串 ([([]])] ,它的最长规则的括号子序列是 [([])]

输入格式

输入包含多组样例。每组样例占据一行,包含一个字符串,该字符串仅由 (,),[,]组成。字符串的长度在 11100100 之间。
输入数据的最后一行包含一个字符串“end”用于标识文件结束。

输出格式

对于每一组数据(除了最后的“end”),你需要输出它的最长规则的括号子序列的长度。

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