文章

35

粉丝

0

获赞

144

访问

7.3k

头像
再定义一个优先级栈,出栈的时候判断
P1067 中山大学机试题
发布于2025年3月20日 17:30
阅读数 255

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

// 大括号 > 中括号 > 小括号 > 尖括号
int priority(char c) {
    if (c == '{' || c == '}') return 1;
    if (c == '[' || c == ']') return 2;
    if (c == '(' || c == ')') return 3;
    if (c == '<' || c == '>') return 4;
    return 0;
}

// 否合法
bool isValid(string expr) {
    stack<char> s;
    stack<int> p; // 存储当前括号的优先级

    for (char c : expr) {
        if (c == '{' || c == '[' || c == '(' || c == '<') {
            s.push(c);
            p.push(priority(c));
        } else if (c == '}' || c == ']' || c == ')' || c == '>') {
            if (s.empty()) return false; // 

            char top = s.top();
            s.pop();
            int topPriority = p.top();
            p.pop();

            if (!((c == '}' && top == '{') || 
                  (c == ']' && top == '[') || 
                  (c == ')' && top == '(') || 
                  (c == '>' ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发