#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
原文:http://blog.csdn.net/liujan511536/article/details/42570037