题目简介
给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 "croak" )的组合。由于同一时间可以有多只青蛙呱呱作响,所以 croakOfFrogs 中会混合多个 “croak” 。
请你返回模拟字符串中所有蛙鸣所需不同青蛙的最少数目。
要想发出蛙鸣 “croak”,青蛙必须 依序 输出 ‘c’, ’r’, ’o’, ’a’, ’k’ 这 5 个字母。如果没有输出全部五个字母,那么它就不会发出声音。如果字符串 croakOfFrogs 不是由若干有效的 “croak” 字符混合而成,请返回 -1 。
示例 1:
1 | 输入:croakOfFrogs = "croakcroak" |
示例 2:
1 | 输入:croakOfFrogs = "crcoakroak" |
示例 3:
1 | 输入:croakOfFrogs = "croakcrook" |
提示:
1 <= croakOfFrogs.length <= 10^5- 字符串中的字符只有
'c','r','o','a'或者'k'
思路:
按顺序遍历,定义flogs为当前存在的青蛙数量,res为最大的青蛙数量
当遇到c时,说明新的一只青蛙开始叫了(++flogs,也有可能是以前的青蛙结束了),更新res = max(res, ++flogs)。
否则,观察前一个字符之前是否已经遇到过,若没有,说明不是按顺序叫的,return -1。
当遇到了k,说明这只青蛙叫完了,--flogs。
若最后flogs != 0,说明有青蛙没叫完,return -1。
tip:
- 若长度不为5的倍数,直接
return -1
代码如下:
1 | class Solution { |