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