1 条题解

  • 1

    核心代码:match函数(不要直接照抄,理解完再自己写,尊重他人劳动成果,这题我做了二三十分钟)

    void match(string s)
    {
        stack<int>stk; //定义栈stk
        for(int i=0;i<=s.size();i++) //逐字检查
        {
            if(s[i]=='(') stk.push(i); //若为左括号则入栈,保存下标以便后续输出
            if(s[i]==')'&&stk.empty()) {cout<<"right "<<i;return;} //若遇右括号而栈中无元素,说明没有对应的左括号,应题目要求返回首个失配的右括号下标,直接返回后退出程序(做到此处得40分)
            if(s[i]==')') stk.pop(); //前面排除了空栈的可能性,这里必有配对的左括号,故弹出栈顶元素视为一组括号配对成功
        }
        if(stk.empty()) {cout<<"ok";return;} //若最终空栈则为全部配对成功,应要求输出ok后退出程序(做到此处得60分)
        cout<<"left "; //若程序未结束说明有左括号未配对
        for(int i=0;i<=stk.size();++i) {
            cout<<stk.top()<<' '; stk.pop(); //应题目要求,结合样例从后往前输出所有失配左括号的下标,故先输出栈顶元素后再弹出栈顶元素,直到空栈(做到此处100分)
        }   
    }
    
  • 1

信息

难度
9
分类
(无)
标签
递交数
9
已通过
1
通过率
11%
上传者