小渣青999 @ 2020-08-15 20:38:34
#include<iostream>
#include<cstdio>
#include<vector>
#include<stack>
#include<string>
using namespace std;
int a[4];//0[ 1] 2( 3)
vector<int> v[4];
vector<int> vt[2];
stack<int> st[2];
int main()
{
string s;
cin>>s;
int flag=1;
for(int i=0;i<s.size();i++)
{
if(s[i]=='[') st[0].push(i);
else if(s[i]==']')
{
if(st[0].empty())
{
s.insert(i,"["); i++;
}
else st[0].pop();
}
}
if(!st[0].empty())
{
while(!st[0].empty())
{
int x=st[0].top();
st[0].pop();
s.insert(x+1,"]");
}
}
for(int i=0;i<s.size();i++)
{
if(s[i]=='(') st[0].push(i);
else if(s[i]==')')
{
if(st[0].empty())
{
s.insert(i,"("); i++;
}
else st[0].pop();
}
}
if(!st[0].empty())
{
while(!st[0].empty())
{
int x=st[0].top();
st[0].pop();
s.insert(x+1,")");
}
}
cout<<s;
return 0;
}
/*
存储所有括号的位置
从前向后扫描
遇到一个左括号就push
遇到一个右括号就pop(如果此时空栈,则在前面加上一个左括号再pop
如果最后栈不为空,在每个左括号后面加上一个有括号
*/