c_cpp 使表达式平衡所需的最小括号反转次数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 使表达式平衡所需的最小括号反转次数相关的知识,希望对你有一定的参考价值。

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

以上是关于c_cpp 使表达式平衡所需的最小括号反转次数的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 将所有元素小于或等于k所需的最小交换

搜索排序数组中出现次数超过一半的元素所需的最小比较

将给定数字转换为幸运数字所需的最小移动次数[关闭]

给定 5 个数字,找到中位数所需的最小比较次数是多少?

使序列的所有元素为 0 所需的最小步骤数

找到所需的最小元素数,以使它们的总和等于或超过 S