一个合法的括号序列满足以下条件:
- 序列()被认为是合法的。
- 如果序列X与Y是合法的,则XY也被认为是合法的。
- 如果序列X是合法的,则(X)也是合法的。
例如,(),()(),(())这些都是合法的。
现在,给定一个由 ( 和 ) 组成的字符串。
请你求出其中的最长合法括号子序列的长度。
注意,子序列不一定连续。
输入格式
输出格式
数据范围
前五个测试点满足, 1≤输入字符串的长度≤101≤输入字符串的长度≤10。
所有测试点满足,1≤输入字符串的长度≤1061≤输入字符串的长度≤106。
输入样例1:
输出样例1:
输入样例2:
输出样例2:
6
//合法括号序列两个条件 最后cnt = 0, 前缀序列中 cnt >= 0#include <iostream>#include <algorithm>using namespace std;const int N = 1000010;char s[N];int main() {cin >> s;//l代表前缀序列中cnt,遇到(+1,遇到)-1int l = 0, r = 0;for (int i = 0; s[i]; ++i) {if (s[i] == '(') l++;else if (l > 0) {l--;r++;}}cout << r * 2 << endl;return 0;}
