用栈消去已经完美的括号,剩下的分两种情况处理就是了
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <vector>
#include <set>
#include <stack>
#include <map>
#include <climits>
using namespace std;
typedef long long ll;
const int maxn = 100 + 7, INF = 0x3f3f3f3f, mod = 1e9 + 7;
stack<char> sk;
char s[maxn];
int n;
int main() {
int T; scanf("%d", &T);
while(T--) {
scanf("%d%s", &n, s);
for(int i = 0; i < n; ++i) {
if(!sk.empty()) {
if(s[i] == ')') {
if(sk.top() == '(') sk.pop();
else sk.push(s[i]);
}
else sk.push(s[i]);
}
else sk.push(s[i]);
}
int ans = 0;
while(!sk.empty()) {
char c1 = sk.top(), c2;
sk.pop();
if(!sk.empty()) c2 = sk.top(), sk.pop();
if(c1 == c2) ans ++;
else ans += 2;
//cout << ans << " == " << endl;
}
cout << ans << endl;
}
return 0;
}