有多少种方法可以添加括号来进行真正的陈述

时间:2015-03-24 19:40:45

标签: algorithm

给定包含True和False的字符串,并且还包含运算符(和&,或||,xor ^)。添加括号以使语句为True的方法有多少?

Eg: Input T || F ^ F
(T||F)^F
T||(F^F)
(T||F^F)
output: 3

我在采访中遇到这个问题,我坚持这个,并没有想出来。非常有趣的问题。

任何想法都赞赏

1 个答案:

答案 0 :(得分:4)

再次离开被称为CYK的大锤。括号对应于语法中的不同解析,如

Expr -> 'F'
      | 'T'
      | Expr '&' Expr
      | Expr '|' Expr
      | Expr '^' Expr

。我们可以为真正的假表达式编写新的规则。

TExpr -> 'T'
       | TExpr '&' TExpr
       | TExpr '|' Expr
       | FExpr '|' TExpr
       | FExpr '^' TExpr
       | TExpr '^' FExpr

FExpr -> 'F'
       | FExpr '&' Expr
       | TExpr '&' FExpr
       | FExpr '|' FExpr
       | FExpr '^' FExpr
       | TExpr '^' TExpr

然后使用CYK计算不同的解析。

更复杂的语法处理广义问题,其中括号是可选的,并由优先级推断。