文章

55

粉丝

100

获赞

12

访问

30.9k

头像
括号的匹配 题解:利用map来控制优先级
P1067 中山大学2019年机试题
发布于2024年3月11日 00:40
阅读数 786

#include<stdio.h>
#include<iostream>
#include<stack>
#include<map>
using namespace std;

int main(){
    stack<char> stk;
    map<char,int> priority = {
        {'<',1},
        {'(',2},
        {'[',3},
        {'{',4}
    };
    //如果入栈元素的优先级大于栈顶元素的优先级则直接报错
    int n;
    cin>>n;
    string str;
    for(int j = 0; j<n; j++){
        cin>>str;
        int len = str.length();
        for(int i = 0; i<len; i++){
            //当栈不为空时,入栈时需要判断
            if(!stk.empty()){
                if(str[i] == '<' || str[i] == '(' || str[i] == '[' || str[i] == '{'){//若是左括号就进行优先级判断
                    if(priority[str[i]] > priority[stk.top()]){//若优先级大于栈顶元素,则直接终止循环,因为栈里面还有元素,可以直接在下面输出NO
                        break;
                    }
                    stk.push(str[i]);
                }else if(str[i] == '>'  && stk.top()=='<'|| str[i] == ')' && stk.top() == '(' || str[i] == ']'...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发