golang leetcode 1106 解析布尔表达式

栏目: Go · 发布时间: 6年前

内容简介:根据题意我们可以知道,一个运算符一定会跟随一对括号,比如 !(t)。所以我们可以直接判断expression[0],得到最外层的运算符,根据运算符处理内层的表达式。完整代码见下:

根据题意我们可以知道,一个运算符一定会跟随一对括号,比如 !(t)。

所以我们可以直接判断expression[0],得到最外层的运算符,根据运算符处理内层的表达式。

  1. 如果不是运算符,肯定就是 't'或者 'f' 直接判断即可
  2. 如果是't',里面要么就是单一的字符,要么就是一个新的表达式。再调用parseBoolExpr解析并取反即可。
  3. 如果是 '&' 或者 '|', 需要对里面每个表达式分别求解。通过括号匹配,拿到第一个'('匹配的')'里面的表达式,再通过 parseBoolExpr 计算出值。
  4. 在计算 '&' 的时候,如果有一个值为false,可以提前结束计算。同理,在计算'|'时, 如果有一个值为true,也可以提前结束计算。

完整代码见下:

func parseBoolExpr(expression string) bool {
    start, end := 2, len(expression)-1
    switch expression[0] {
    case '!':
        return Not(expression[start:end])
    case '&':
        return AndOr(expression[start:end], true)
    case '|':
        return AndOr(expression[start:end], false)
    default:
        return expression == "t"
    }
}

// flag &: true |: false
func AndOr(exp string, flag bool) bool {
    pre, idx := 0, 0
    for i := 0; i < len(exp); i++ {
        if exp[i] == '(' {
            if pre == 0 {
                idx = i
            }
            pre++
        } else if exp[i] == ')' {
            pre--
            if pre == 0 {
                t := parseBoolExpr(exp[idx-1 : i+1])
                if !t && flag {
                    return false
                }
                if t && !flag {
                    return true
                }
            }
        } else {
            if pre <= 0 {
                if exp[i] == 'f' && flag {
                    return false
                }
                if exp[i] == 't' && !flag {
                    return true
                }
            }
        }
    }
    return flag
}

func Not(exp string) bool {
    if len(exp) == 1 {
        return !(exp == "t")
    }
    return !parseBoolExpr(exp)
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

大数据时代的IT架构设计

大数据时代的IT架构设计

IT架构设计研究组 / 电子工业出版社 / 2014-4 / 49.00元

《大数据时代的IT架构设计》以大数据时代为背景,邀请著名企业中的一线架构师,结合工作中的实际案例展开与架构相关的讨论。《大数据时代的IT架构设计》作者来自互联网、教育、传统行业等领域,分享的案例极其实用,代表了该领域较先进的架构。无论你就职于哪一行业都可以从本书中找到相关的架构经验,对您在今后的架构设计工作中都能起到很好的帮助作用。 《大数据时代的IT架构设计》适合具备一定架构基础和架构经验......一起来看看 《大数据时代的IT架构设计》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具