[
recursion
tree
math
dp
stack
]
BinarySearch 0876 Toggle Bitwise Expression
Problem statement
https://binarysearch.com/problems/Toggle-Bitwise-Expression/
Solution
Equal to Leetcode 1896. Minimum Cost to Change the Final Value of Expression.
Complexity
Time complexity can be estimated as O(n)
, because in fact for every valid substring we have we will call it once. Space complexity is O(n)
as well.
Code
class Solution:
def minOperationsToFlip(self, E):
def corr(s):
stack, d = [], {}
for i, elem in enumerate(s):
if elem == "(":
stack.append(i)
elif elem == ")":
last = stack.pop()
d[i] = last
return d
def dfs(beg, end):
if beg == end: return (int(E[beg]) , 1)
beg2 = d.get(end, end)
if beg2 == beg: return dfs(beg + 1, end - 1)
p1, c1 = dfs(beg, beg2 - 2)
p2, c2 = dfs(beg2, end)
op = E[beg2 - 1]
t = {"|": lambda x, y:x|y, "&": lambda x, y:x&y}
c3 = 1 if p1 + p2 == 1 else min(c1, c2) + (p1^(op == "&"))
return (t[op](p1, p2), c3)
d = corr(E)
return dfs(0, len(E) - 1)[1]