<p>You are given the string <code>croakOfFrogs</code>, which represents a combination of the string <code>&quot;croak&quot;</code> from different frogs, that is, multiple frogs can croak at the same time, so multiple <code>&quot;croak&quot;</code> are mixed.</p>

<p><em>Return the minimum number of </em>different<em> frogs to finish all the croaks in the given string.</em></p>

<p>A valid <code>&quot;croak&quot;</code> means a frog is printing five letters <code>&#39;c&#39;</code>, <code>&#39;r&#39;</code>, <code>&#39;o&#39;</code>, <code>&#39;a&#39;</code>, and <code>&#39;k&#39;</code> <strong>sequentially</strong>. The frogs have to print all five letters to finish a croak. If the given string is not a combination of a valid <code>&quot;croak&quot;</code> return <code>-1</code>.</p>

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

<pre>
<strong>Input:</strong> croakOfFrogs = &quot;croakcroak&quot;
<strong>Output:</strong> 1 
<strong>Explanation:</strong> One frog yelling &quot;croak<strong>&quot;</strong> twice.
</pre>

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

<pre>
<strong>Input:</strong> croakOfFrogs = &quot;crcoakroak&quot;
<strong>Output:</strong> 2 
<strong>Explanation:</strong> The minimum number of frogs is two. 
The first frog could yell &quot;<strong>cr</strong>c<strong>oak</strong>roak&quot;.
The second frog could yell later &quot;cr<strong>c</strong>oak<strong>roak</strong>&quot;.
</pre>

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

<pre>
<strong>Input:</strong> croakOfFrogs = &quot;croakcrook&quot;
<strong>Output:</strong> -1
<strong>Explanation:</strong> The given string is an invalid combination of &quot;croak<strong>&quot;</strong> from different frogs.
</pre>

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

<ul>
	<li><code>1 &lt;= croakOfFrogs.length &lt;= 10<sup>5</sup></code></li>
	<li><code>croakOfFrogs</code> is either <code>&#39;c&#39;</code>, <code>&#39;r&#39;</code>, <code>&#39;o&#39;</code>, <code>&#39;a&#39;</code>, or <code>&#39;k&#39;</code>.</li>
</ul>

class Solution:
    def minNumberOfFrogs(self, croakOfFrogs: str) -> int:
        #Maintain a croak map -- each letter to count 
        #b/c each letter only appears once, just get the max count for any letter
        #can subtract each count by one when we see a k 
        #acc, we can just count "c" and decrement when we see k 

        #now, how do we verify string is valid 
        #this would require map -- if count of a letter exceeds the count of the letter before it 

        # counts = [0] * 5

        # idxs = {"c" : 0, "r" : 1, "o":2, "a": 3, "k":4}

        # res = 0
        # cur = 0 
        # for char in croakOfFrogs:
        #     idx = idxs[char]
        #     counts[idx] += 1 
        #     if char == "c":
        #         cur += 1 
        #         res = max(cur, res)
        #     else:
        #         if counts[idx] > counts[idx - 1]:
        #             return -1
        #         if char == "k":
        #             cur -= 1 
        # if cur:
        #     return -1
        # return res 
        
        res = c = r = o = a = k = 0 
        for char in croakOfFrogs:
            if char == "c":
                c += 1 
                res = max(res, c - k)
            elif char == "r":
                r += 1 
                if c < r:
                    return -1
            elif char == "o":
                o += 1 
                if r < o:
                    return -1 
            elif char == "a":
                a += 1 
                if o < a:
                    return -1 
            elif char == "k":
                k += 1 
                if a < k:
                    return -1 
        return res if c==k else -1

        
77