1106. 解析布尔表达式

1106. 解析布尔表达式

题解:每个小括号都可以优先递归计算,dfs

class Solution {
    int index;
    char[] ch;
     public boolean parseBoolExpr(String expression) {
        ch = expression.toCharArray();
        index = 0;
        return dfs();
    }

    public boolean dfs() {
        if (ch[index] == 'f') {
            index++;
            return false;
        }
        if (ch[index] == 't') {
            index++;
            return true;
        }
        // 如果是操作符,需要跳过'('
        char op = ch[index];
        index += 2;

        // 如果是 ! or & 初始化为true
        boolean res = true;
        // 如果是 | 初始化为false
        if (op == '|') res = false;

        while(ch[index] != ')') {
            // ',' 跳过
            if (ch[index] == ',') {
                index ++;
            } else {
                boolean nextBool = dfs();
                // '|' 直接或运算
                if (op == '|') {
                    res = res | nextBool;
                } else {
                // '&' or '!' 直接与运算,  '!': true & !(false) = true , true & !(true) = false
                    res = res & nextBool;
                }
            }
        }
        // 跳过')'
        index ++;
        // 取反
        if (op == '!') {
            res = !res;
        }
        return res;
    }
}
posted @   Eiffelzero  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示