mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-01-10 18:48:13 +08:00
60 lines
3.6 KiB
HTML
60 lines
3.6 KiB
HTML
<p>You are given a <strong>valid</strong> boolean expression as a string <code>expression</code> consisting of the characters <code>'1'</code>,<code>'0'</code>,<code>'&'</code> (bitwise <strong>AND</strong> operator),<code>'|'</code> (bitwise <strong>OR</strong> operator),<code>'('</code>, and <code>')'</code>.</p>
|
|
|
|
<ul>
|
|
<li>For example, <code>"()1|1"</code> and <code>"(1)&()"</code> are <strong>not valid</strong> while <code>"1"</code>, <code>"(((1))|(0))"</code>, and <code>"1|(0&(1))"</code> are <strong>valid</strong> expressions.</li>
|
|
</ul>
|
|
|
|
<p>Return<em> the <strong>minimum cost</strong> to change the final value of the expression</em>.</p>
|
|
|
|
<ul>
|
|
<li>For example, if <code>expression = "1|1|(0&0)&1"</code>, its <strong>value</strong> is <code>1|1|(0&0)&1 = 1|1|0&1 = 1|0&1 = 1&1 = 1</code>. We want to apply operations so that the<strong> new</strong> expression evaluates to <code>0</code>.</li>
|
|
</ul>
|
|
|
|
<p>The <strong>cost</strong> of changing the final value of an expression is the <strong>number of operations</strong> performed on the expression. The types of <strong>operations</strong> are described as follows:</p>
|
|
|
|
<ul>
|
|
<li>Turn a <code>'1'</code> into a <code>'0'</code>.</li>
|
|
<li>Turn a <code>'0'</code> into a <code>'1'</code>.</li>
|
|
<li>Turn a <code>'&'</code> into a <code>'|'</code>.</li>
|
|
<li>Turn a <code>'|'</code> into a <code>'&'</code>.</li>
|
|
</ul>
|
|
|
|
<p><strong>Note:</strong> <code>'&'</code> does <strong>not</strong> take precedence over <code>'|'</code> in the <strong>order of calculation</strong>. Evaluate parentheses <strong>first</strong>, then in <strong>left-to-right</strong> order.</p>
|
|
|
|
<p> </p>
|
|
<p><strong class="example">Example 1:</strong></p>
|
|
|
|
<pre>
|
|
<strong>Input:</strong> expression = "1&(0|1)"
|
|
<strong>Output:</strong> 1
|
|
<strong>Explanation:</strong> We can turn "1&(0<u><strong>|</strong></u>1)" into "1&(0<u><strong>&</strong></u>1)" by changing the '|' to a '&' using 1 operation.
|
|
The new expression evaluates to 0.
|
|
</pre>
|
|
|
|
<p><strong class="example">Example 2:</strong></p>
|
|
|
|
<pre>
|
|
<strong>Input:</strong> expression = "(0&0)&(0&0&0)"
|
|
<strong>Output:</strong> 3
|
|
<strong>Explanation:</strong> We can turn "(0<u><strong>&0</strong></u>)<strong><u>&</u></strong>(0&0&0)" into "(0<u><strong>|1</strong></u>)<u><strong>|</strong></u>(0&0&0)" using 3 operations.
|
|
The new expression evaluates to 1.
|
|
</pre>
|
|
|
|
<p><strong class="example">Example 3:</strong></p>
|
|
|
|
<pre>
|
|
<strong>Input:</strong> expression = "(0|(1|0&1))"
|
|
<strong>Output:</strong> 1
|
|
<strong>Explanation:</strong> We can turn "(0|(<u><strong>1</strong></u>|0&1))" into "(0|(<u><strong>0</strong></u>|0&1))" using 1 operation.
|
|
The new expression evaluates to 0.</pre>
|
|
|
|
<p> </p>
|
|
<p><strong>Constraints:</strong></p>
|
|
|
|
<ul>
|
|
<li><code>1 <= expression.length <= 10<sup>5</sup></code></li>
|
|
<li><code>expression</code> only contains <code>'1'</code>,<code>'0'</code>,<code>'&'</code>,<code>'|'</code>,<code>'('</code>, and <code>')'</code></li>
|
|
<li>All parentheses are properly matched.</li>
|
|
<li>There will be no empty parentheses (i.e: <code>"()"</code> is not a substring of <code>expression</code>).</li>
|
|
</ul>
|