给定包含True和False的字符串,并且还包含运算符(和&,或||,xor ^)。添加括号以使语句为True的方法有多少?
Eg: Input T || F ^ F
(T||F)^F
T||(F^F)
(T||F^F)
output: 3
我在采访中遇到这个问题,我坚持这个,并没有想出来。非常有趣的问题。
任何想法都赞赏
答案 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计算不同的解析。
更复杂的语法处理广义问题,其中括号是可选的,并由优先级推断。