56分求助救救蒟蒻

P1241 括号序列

zhaobofeng111 @ 2024-01-07 11:12:33

救命

只有56分 后面几个过不了

#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<ctime>
#include<iomanip>
#include<string>
#include<map>
#include<stack>
#include<queue>
#include<deque>
#include<vector>
using namespace std;
int main(){
string s;
stack<char> q;
int b[100001]={};
cin>>s;
for(int i=0;i<s.length();i++){
    if(q.size()!=0){     
        if(q.top()=='('&&s[i]==')'){   
            b[i]=1;
            b[i-1]=1;
            }
        if(q.top()=='['&&s[i]==']'){
            b[i]=1;
            b[i-1]=1;
        }
    }
    q.push(s[i]);
}
for(int i=0;i<s.length();i++){
    if(b[i]!=1){
        if(s[i]=='('||s[i]==')'){
            cout<<'('<<')';
        }
        else{
            cout<<'['<<']';
        }
    }
    else{
        cout<<s[i];
    }
}
   return 0;
}

by WiliestJoseph15 @ 2024-01-17 10:41:37

for(int i=0;i<s.length();i++){
    if(q.size()!=0){     
        if(q.top()=='('&&s[i]==')'){   
            b[i]=1;
            b[i-1]=1;
            }

配对的括号并不是一定挨在一起的,如(])这样,所以不能直接标记右括号之前的那一位。可以试试把左括号的下标压入栈,配对的时候再通过下标在字符串中找出来验证


by zhaobofeng111 @ 2024-03-02 10:22:47


收到,万般感谢大佬救我于水火

|