文章

61

粉丝

137

获赞

18

访问

41.9k

头像
括号的匹配 题解:c++ stl中的stack容器和map容器实现。
P1067 中山大学2019年机试题
发布于2024年3月24日 11:29
阅读数 958

#include<bits/stdc++.h>
using namespace std;

//设置括弧的优先级
map<char,int> bkPriority = {
    {'<', 0}, {'(', 1}, {'[', 2}, {'{', 3}
};
    //设置括弧的匹配
map<char,char> bkMatch = {
    {'>',  '<'}, {')', '('}, {']', '['}, {'}', '{'}
};

bool match(string s){
    int slen = s.size();
    stack<char> stk;
    for(int i = 0;i < slen; i++){
            if(s[i] == '<' || s[i] == '(' || s[i] == '[' || s[i] == '{'){ //左括弧入栈处理
               if(!stk.empty() && bkPriority[s[i]] > bkPriority[stk.top()])//判断括号的优先级顺序正确
                    return false;
                stk.push(s[i]);
            }else{      //右括弧出栈匹配处理
                if(stk.empty())
                    return false;
                else if(stk.top() != bkMatch[s[i]])
                    return false;
                else
                    stk.pop();
            }
    }
    if(stk.empty())
        return true;
    else
        return false;
}


in...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发