52分RE求救

P1241 括号序列

Qiuziyi @ 2024-01-18 15:32:51

#include<bits/stdc++.h>
using namespace std;
string S;
int len;
char ans[110];
stack<char> s;
stack<int> x;
int main(){
    cin>>S;
    len=S.length();
    for(int i=0;i<len;i++){
        if(S[i]=='(' || S[i]=='['){
            s.push(S[i]),x.push(i);
            if(S[i]=='(') ans[i]=')';
            else ans[i]=']';
        }
        else{
            char tmp;
            if(S[i]==')') tmp='(';
            else tmp='[';
            if(s.top()==tmp){
                ans[x.top()]=' ',ans[i]=' ';
                s.pop(),x.pop();
            }else ans[i]=tmp;
        }
    }
    for(int i=0;i<len;i++){
        if(ans[i]==' ') cout<<S[i];
        else if(ans[i]=='(' || ans[i]=='[') cout<<ans[i]<<S[i];
        else cout<<S[i]<<ans[i];
    }
    return 0;
}

是类似题解第一篇的做法 TAT


by cjh666 @ 2024-02-07 17:33:33

@Qiuziyi 同52分RE,出现的问题是当栈空的时候调用了top()。在读入右括号的时候应该先判断栈是否为空,否则在比较栈顶元素的时候会RE

不知道现在回复能不能帮到你:P


by zuijiubugui @ 2024-02-27 14:39:55

@cjh666 感谢 vector也是同样的问题


|