package
0.0.0-20230809123828-b071cee2968a
Repository: https://github.com/codehanhan/leetcode-go.git
Documentation: pkg.go.dev

# README

面试题 08.14.布尔运算

1. 题目描述

给定一个布尔表达式和一个期望的布尔结果 result,布尔表达式由 0 (false)、 1 (true)、 & (AND)、 | (OR) 和 ^ (XOR) 符号组成。实现一个函数,算出有几种可使该表达式得出 result 值的括号方法。

示例 1:

输入: s = "1^0|0|1", result = 0

输出: 2
解释: 两种可能的括号方法是
1^(0|(0|1))
1^((0|0)|1)

示例 2:

输入: s = "0&0&0&1^1|0", result = 1

输出: 10

提示:

  • 运算符的数量不超过 19 个

标签 记忆化搜索 字符串 动态规划

2. 解题

TODO: redo 动态规划 使用一个三维数组dp,dp[i][j][k]表示子串s[i:j+1]通过添加括号最终得到结果为k的方案数。 注意i和j位置都应该是数字,k只能取0或1 要计算dp[i][j]我们只需要考虑从子串s[i:j+1]有多少种拆分为两部分的方案。通过遍历(i,j)范围内的操作符即可。 记操作符下标为k,对于每一个可能的k,我们把前半段 dp[i][k-1] 和后半段dp[k+1][j]的结果按情况添加到dp[i][j]当中