<p>You are given a <strong>0-indexed</strong> binary string <code>s</code> of length <code>n</code> on which you can apply two types of operations:</p>

<ul>
	<li>Choose an index <code>i</code> and invert all characters from&nbsp;index <code>0</code> to index <code>i</code>&nbsp;(both inclusive), with a cost of <code>i + 1</code></li>
	<li>Choose an index <code>i</code> and invert all characters&nbsp;from&nbsp;index <code>i</code> to index <code>n - 1</code>&nbsp;(both inclusive), with a cost of <code>n - i</code></li>
</ul>

<p>Return <em>the <strong>minimum cost </strong>to make all characters of the string <strong>equal</strong></em>.</p>

<p><strong>Invert</strong> a character means&nbsp;if its value is &#39;0&#39; it becomes &#39;1&#39; and vice-versa.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;0011&quot;
<strong>Output:</strong> 2
<strong>Explanation:</strong> Apply the second operation with <code>i = 2</code> to obtain <code>s = &quot;0000&quot; for a cost of 2</code>. It can be shown that 2 is the minimum cost to make all characters equal.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;010101&quot;
<strong>Output:</strong> 9
<strong>Explanation:</strong> Apply the first operation with i = 2 to obtain s = &quot;101101&quot; for a cost of 3.
Apply the first operation with i = 1 to obtain s = &quot;011101&quot; for a cost of 2. 
Apply the first operation with i = 0 to obtain s = &quot;111101&quot; for a cost of 1. 
Apply the second operation with i = 4 to obtain s = &quot;111110&quot; for a cost of 2.
Apply the second operation with i = 5 to obtain s = &quot;111111&quot; for a cost of 1. 
The total cost to make all characters equal is 9. It can be shown that 9 is the minimum cost to make all characters equal.
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= s.length == n &lt;= 10<sup>5</sup></code></li>
	<li><code>s[i]</code> is either <code>&#39;0&#39;</code> or <code>&#39;1&#39;</code></li>
</ul>

class Solution:
    def minimumCost(self, s: str) -> int:
        
        l = ans = 0
        r = len(s) - 1
        a = b = False
        i = j = 0
        # all zero
        while l <= r:
            if not a and s[l] == "1":
                a = True
                i = l 
            if a and s[l] == "0":
                ans += i + l 
                a = False
                i = 0

            if not b and s[r] == "1":
                b = True
                j = (len(s) - r) - 1
            if b and s[r] == "0":
                ans += j + (len(s) - r) - 1
                b = False
                j = 0

            l += 1
            r -= 1
            print(ans, l, r, i, j)

        if a and not b:
            ans += i + l
        elif b and not a:
            ans += j + (len(s) - (r + 1)) 
        elif a and b:
            while l < len(s) and s[l] == "1":
                l += 1
            while r >= 0 and s[r] == "1":
                r -= 1
            ans += min(j + (len(s) - r) - 1, i + l)
        
        l = k = 0
        r = len(s) - 1
        a = b = False
        i = j = 0
        # all ones
        while l <= r:
            if not a and s[l] == "0":
                a = True
                i = l 
            if a and s[l] == "1":
                k += i + l 
                a = False
                i = 0

            if not b and s[r] == "0":
                b = True
                j = (len(s) - r) - 1
            if b and s[r] == "1":
                k += j + (len(s) - r) - 1
                b = False
                j = 0
            l += 1
            r -= 1
        
        if a and not b:
            k += i + l 
        if b and not a:
            k += j + (len(s) - (r + 1)) 
        elif a and b:
            while l < len(s) and s[l] == "0":
                l += 1
            while r >= 0 and s[r] == "0":
                r -= 1
            k += min(j + (len(s) - r) - 1, i + l)
        print(k)
        return min(ans, k)




398