Minimum number of bracket reversals needed to make an expression balanced
/*
http://ideone.com/goOdhF
http://www.geeksforgeeks.org/minimum-number-of-bracket-reversals-needed-to-make-an-expression-balanced/
http://www.practice.geeksforgeeks.org/problem-page.php?pid=961
*/
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int countReversal(string str){
int len = str.size();
if(len%2)
return -1;
stack<char> s;
for(int i=0; i<len; i++){
if(str[i] == '}' && !s.empty()){
if(s.top() == '{')
s.pop();
else
s.push(str[i]);
}else
s.push(str[i]);
}
int count_left = s.size();
int n = 0;
while(!s.empty() && s.top() == '{'){
s.pop();
n++;
}
return (count_left/2 + n%2);
}
int main() {
int t;
cin >> t;
while(t--){
string str;
cin >> str;
cout << countReversal(str) << endl;
}
return 0;
}