kikit
7/7/2016 - 3:04 PM

Minimum number of bracket reversals needed to make an expression balanced

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;
}