愣是不知道哪里错了(56分)

P1241 括号序列

lelaimc @ 2024-09-29 13:25:18

#include<bits/stdc++.h>
using namespace std;
struct Node{
    string a;
    int flag;
}w[101];
int main()
{
    string s;
    cin>>s;
    for(int i=0;i<=101;i++)
    w[i].flag=0;
    for(int i=0;i<s.size();i++)
    {
        w[i].a=s[i];
        if((s[i]==')')||(s[i]==']'))
        {
            for(int p=i-1;p>=0;p--)
            {
                if((w[p].flag==0)&&((s[p]=='(')||(s[p]=='[')))
                {
                    if((s[i]==')')&&(s[p]=='('))
                    {
                        w[p].a="";
                        w[p].flag=1;
                        w[i].a="()";
                        w[i].flag=1;
                    }
                    else if((s[i]==']')&&(s[p]=='['))
                    {
                        w[p].a="";
                        w[p].flag=1;
                        w[i].a="[]";
                        w[i].flag=1;
                    }
                    break;
                }
            }
        }
    }
    for(int i=0;i<s.size();i++)
    {
        if((w[i].a==")"||w[i].a=="(")&&w[i].flag==0) w[i].a="()";
        if((w[i].a=="["||w[i].a=="]")&&w[i].flag==0) w[i].a="[]";
        cout<<w[i].a;
    }
    return 0;
}

by youngsmart @ 2024-10-22 21:49:10

这道题直接枚举左括号,看右括号是否匹配就可以了

#include<cstdio>
#include<cstring>
int  q[101],top;
char c[101],b[101];
int main()
{
    int i,l;
    scanf("%s",c);
    l=strlen(c);
    for (i=0;i<l;i++)
    {
        if (c[i]=='(') {q[++top]=i; b[i]=')';}
        if (c[i]=='[') {q[++top]=i; b[i]=']';}
        if (c[i]==')'||c[i]==']')
            if (!top||b[q[top]]!=c[i])
                if (c[i]==')') b[i]='('; else b[i]='[';
            else b[q[top--]]=' ';
    }
    for (i=0;i<l;i++)
    {
        if (b[i]=='('||b[i]=='[') printf("%c",b[i]);
        printf("%c",c[i]);
        if (b[i]==')'||b[i]==']') printf("%c",b[i]);
    }
    return 0;
}

|