一个合法的括号序列满足以下条件:
- 序列
()
被认为是合法的。 - 如果序列
X
与Y
是合法的,则XY
也被认为是合法的。 - 如果序列
X
是合法的
串。
请你求出其中的最长合法括号子序列的长度。
注意,子序列不一定连续。
输入格式
共一行,一个由 (
和 )
组成的字符串。
输出格式
一个整数,表示最长合法括号子序列的长度。
数据范围
前五个测试点满足, 1≤输入字符串的长度≤101≤输入字符串的长度≤10。
所有测试点满足,1≤输入字符串的长度≤1061≤输入字符串的长度≤106。
输入样例1:
(()))(
输出样例1:
4
#include<bits/stdc++.h>
using namespace std;
const int N = 1000010;
char s[N];
int main(){
stack<int> stk;
cin >> s;int c=0,a=1,r;
for(int i=0;s[i];i++){
if(stk.size()&&s[i]==')'&&s[stk.top()]=='(')
stk.pop();
else stk.push(i);
if(stk.size())r=i-stk.top();
else r=i+1;
if(r>c){
c=r;
a=1;
}
else if(r==c&&r>0)a++;
}
printf("%d %d",c,a);
}