首页 > 代码库 > Sicily 1543. Completing Brackets

Sicily 1543. Completing Brackets

#include "iostream"
#include "string"
#include "stack"
using namespace std;

/*
题目链接:http://soj.sysu.edu.cn/show_problem.php?pid=1543&cid=
主要思想:先用栈来消除那些已经匹配了的,
然后再在剩下的那些里看有多少左括号和右括号;
每有一个右括号,就在字符串左边加上一个左括号;
每有一个左括号,就在字符串右边加上一个右括号
*/
int main(){
	string s;
	while (cin >> s){
		int flag = 0;
		stack<char> s1;
		for (size_t i = 0; i < s.size(); i++){
			if (!s1.empty() && s1.top() == '[' && s[i] == ']')
				s1.pop();
			else
				s1.push(s[i]);
		}
		while (!s1.empty()){
			if (s1.top() == '['){
				s += ']';
				s1.pop();
			}
			else{
				s = '[' + s;
				s1.pop();
			}
		}
		cout << s << endl;
	}
	return 0;
}

Sicily 1543. Completing Brackets