63分求助 注释部分是我的思路 感谢好心的大佬

P1241 括号序列

小渣青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

如果最后栈不为空,在每个左括号后面加上一个有括号 

*/

|