<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 {
public:
    int minNumberOfFrogs(string str) {
      //everytime we encounter a k( if c>0 r>0 o>0 a>0)-->frog++;
        //evrytme you encounter a 'c' a frog started croaking to minimize
        //we should see how many frogs are there so 2 possibilities(new frog,old frog)
        //everytime you assign an old frog (old_frog--); else keep frog as frog 
        //so evrytime you encounter a k check if frog>old_frog(dont increase)
        //if frog==oldfrog (then increase)
        int i=0; int frog=0; int old_frog=0;
        unordered_map<char,int>mp;
        while(i<str.length()){
            if(str[i]=='k'&&mp['c']>0&&mp['r']>0&&mp['o']>0&&mp['a']>0){
                if(frog==old_frog){frog++; old_frog++;}
                else if(frog>old_frog){
                    old_frog++;
                }
                mp['c']--; mp['r']--; mp['o']--; mp['a']--;
            }
            else if(str[i]=='k'){
                return -1;
            }
            else if(str[i]=='c'){
                mp[str[i]]++;
                if(old_frog>0){old_frog--;}
            }
            else if(str[i]=='r'){
                mp[str[i]]++;
                if(mp['r']>mp['c']){
                    return -1;
                }
            }
             if(str[i]=='o'&&mp['c']>0&&mp['r']>0){
                mp[str[i]]++;
                 if(mp['o']>mp['c']||mp['o']>mp['r']){
                     return -1;
                 }
            }
        if(str[i]=='a'&&mp['c']>0&&mp['r']>0&&mp['o']>0){
                mp[str[i]]++;
            if(mp['a']>mp['c']||mp['a']>mp['r']||mp['a']>mp['o']){
                return -1;
            }
            }
            i++;
        }
        if(mp['c']>0||mp['r']>0||mp['o']>0||mp['a']>0){
            return -1;
        }
        return frog++;
    }
};
12100