题目描述
一个合法的括号序列满足以下条件:
序列()被认为是合法的。
如果序列X与Y是合法的,则XY也被认为是合法的。
如果序列X是合法的,则(X)也是合法的。
例如,(),()(),(())这些都是合法的。
现在,给定一个由 ( 和 ) 组成的字符串。
请你求出其中的最长合法括号子序列的长度。
注意,子序列不一定连续。
输入格式
共一行,一个由 ( 和 ) 组成的字符串。
输出格式
一个整数,表示最长合法括号子序列的长度。
数据范围
前五个测试点满足, 1≤输入字符串的长度≤10。
所有测试点满足,1≤输入字符串的长度≤106。
贪心
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
string a;
int s,l,k,lf[1111111],rt[1111111],h[1111111];
int main()
{
cin >> a;
for (int i = 0; i < a.size(); i ++ ){
if(a[i]=='(')k++;
else if(k>0) k--,s++;
}
cout<<s*2;
}
%%%
%%%