<p>You are given a <strong>binary</strong> string <code>s</code> and an integer <code>k</code>.</p>

<p>A <strong>binary string</strong> satisfies the <strong>k-constraint</strong> if <strong>either</strong> of the following conditions holds:</p>

<ul>
	<li>The number of <code>0</code>&#39;s in the string is at most <code>k</code>.</li>
	<li>The number of <code>1</code>&#39;s in the string is at most <code>k</code>.</li>
</ul>

<p>Return an integer denoting the number of <span data-keyword="substring-nonempty">substrings</span> of <code>s</code> that satisfy the <strong>k-constraint</strong>.</p>

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

<div class="example-block">
<p><strong>Input:</strong> <span class="example-io">s = &quot;10101&quot;, k = 1</span></p>

<p><strong>Output:</strong> <span class="example-io">12</span></p>

<p><strong>Explanation:</strong></p>

<p>Every substring of <code>s</code> except the substrings <code>&quot;1010&quot;</code>, <code>&quot;10101&quot;</code>, and <code>&quot;0101&quot;</code> satisfies the k-constraint.</p>
</div>

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

<div class="example-block">
<p><strong>Input:</strong> <span class="example-io">s = &quot;1010101&quot;, k = 2</span></p>

<p><strong>Output:</strong> <span class="example-io">25</span></p>

<p><strong>Explanation:</strong></p>

<p>Every substring of <code>s</code> except the substrings with a length greater than 5 satisfies the k-constraint.</p>
</div>

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

<div class="example-block">
<p><strong>Input:</strong> <span class="example-io">s = &quot;11111&quot;, k = 1</span></p>

<p><strong>Output:</strong> <span class="example-io">15</span></p>

<p><strong>Explanation:</strong></p>

<p>All substrings of <code>s</code> satisfy the k-constraint.</p>
</div>

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

<ul>
	<li><code>1 &lt;= s.length &lt;= 50 </code></li>
	<li><code>1 &lt;= k &lt;= s.length</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 countKConstraintSubstrings(self, s: str, k: int) -> int:
        i, j = 0, 0
        myhash = {"0": 0, "1": 0}
        length_s = len(s)
        count = 0
        while j < length_s:
            
            # increase values based on 0's and 1's
            myhash[s[j]] += 1
            print(i, j, myhash, count)
            while myhash["0"] > k and myhash["1"] > k:
                print(i, j, myhash, count, "x")
                myhash[s[i]] -= 1
                i += 1
            if myhash["0"] <= k or myhash["1"] <= k:
                count += (j-i+1)
            j += 1
            print(i, j, myhash, count, "end")
        return count

# class Solution:
#     def countKConstraintSubstrings(self, s: str, k: int) -> int:
#         i, j = 0, 0
#         myhash = {"0": 0, "1": 0}
#         length_s = len(s)
#         count = 0
        
#         while j < length_s:
#             # Increase values based on 0's and 1's
#             myhash[s[j]] += 1
#             print(i, j, myhash, count)
            
#             # Shrink the window if both 0's and 1's exceed k
#             while myhash["0"] > k and myhash["1"] > k:
#                 print(i, j, myhash, count, "x")
#                 myhash[s[i]] -= 1
#                 i += 1
            
#             # Now check if at least one of 0's or 1's is within k
#             if myhash["0"] <= k or myhash["1"] <= k:
#                 count += (j - i + 1)
            
#             # Move the right pointer
#             j += 1
#             print(i, j, myhash, count, "end")
        
#         return count

97