题目简介
给你一个字符串 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 { |