<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:
        # croaks = []
        # letters = {'c': 'r', 
        #            'r': 'o', 
        #            'o': 'a', 
        #            'a': 'k'}
        # num_croaks = 0
        # for i in croakOfFrogs:
        #     if not croaks and i != 'c':
        #         return -1

        #     elif i == 'c':
        #         croaks.append('c')

        #     else:
        #         for j in range(len(croaks)-1, -1, -1):
        #             if letters[croaks[j][-1]] == i:
        #                 croaks[j] += i
        #                 if croaks[j] == 'croak':
        #                     del croaks[j]
        #                 break
            
        #     num_croaks = max(num_croaks, len(croaks))

        # if len(croaks) > 0 and croaks[-1] != 'croak':
        #     return -1
        # else:
        #     return num_croaks

        croaks = {'c': 0, 
                   'r': 0, 
                   'o': 0, 
                   'a': 0,
                   'k': 0}
        num_croaks = 0
        for i in croakOfFrogs:
            croaks[i] +=1
            if croaks['c'] < croaks['r'] or croaks['r'] < croaks['o'] or croaks['o'] < croaks['a'] or croaks['a'] < croaks['k']:
                return -1
            if croaks['c'] > 0 and croaks['r'] > 0 and croaks['o'] > 0 and croaks['a'] and croaks['k'] > 0:
                for j in 'croak':
                    croaks[j] -= 1
            num_croaks = max(num_croaks, croaks['c'])
        
        if croaks['c'] > 0 or croaks['r'] > 0 or croaks['o'] > 0 or croaks['a'] or croaks['k'] > 0:
            return -1
        return num_croaks
237