解题思路

1.使用栈存储未匹配的左右括号,当当前括号为右括号,栈顶元素为左括号时,两括号匹配,将栈顶元素出栈;否则,将当前括号入栈;遍历完字符串后,遍历栈,统计栈中左右括号的数量,即为需要在字符串开头或结尾添加的右左括号数量;

代码

#include <bits/stdc++.h>
using namespace std;

int main(){
    string s;
    while(cin >> s){
        stack<char> sk;
        for(auto& ch : s){
            if(ch == ']' && !sk.empty() && sk.top() == '['){
                sk.pop(); //当前元素与栈顶元素匹配,栈顶元素出栈
            }
            else{
                sk.push(ch);
            }
        }
        int l = 0, r = 0; //分别表示左右括号的个数
        while(!sk.empty()){
            if(sk.top() == '['){
                l++;
            }
            else{
                r++;
            }
            sk.pop();
        }
        cout << string(r, '[') + s + string(l, ']') << endl;
    }
    return 0;
}