LeetCode - 1419 数青蛙
创始人
2024-02-16 13:16:19
0

题目来源

1419. 数青蛙 - 力扣(LeetCode)

题目描述

给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 "croak" )的组合。由于同一时间可以有多只青蛙呱呱作响,所以 croakOfFrogs 中会混合多个 “croak” 。

请你返回模拟字符串中所有蛙鸣所需不同青蛙的最少数目。

要想发出蛙鸣 "croak",青蛙必须 依序 输出 ‘c’, ’r’, ’o’, ’a’, ’k’ 这 5 个字母。如果没有输出全部五个字母,那么它就不会发出声音。如果字符串 croakOfFrogs 不是由若干有效的 "croak" 字符混合而成,请返回 -1 。

示例

输入croakOfFrogs = "croakcroak"
输出1
说明一只青蛙 “呱呱” 两次
输入croakOfFrogs = "crcoakroak"
输出2
说明

最少需要两只青蛙,“呱呱” 声用颜色标注

第一只青蛙 "crcoakroak"
第二只青蛙 "crcoakroak"

输入croakOfFrogs = "croakcrook"
输出-1
说明给出的字符串不是 "croak" 的有效组合。

提示

  • 1 <= croakOfFrogs.length <= 10^5
  • 字符串中的字符只有 'c''r''o''a' 或者 'k'

题目解析

本题要求至少几只青蛙才能产生用例叫声。

其实这个问题可以改为:找出最多只青蛙同时叫的情况。

同时叫,意味着,一只青蛙未叫完的过程中,又有其他青蛙开始叫。比如

crcoakroak

在红色呱声未叫完前,又有一个呱声叫了起来,因此至少要有两个青蛙。

croakcroak

而上面这个红色呱声叫的过程中,没有新呱声产生,因此可能只有一个青蛙。

因此,我们只需要统计相邻‘c’和'k'之间,至多的‘c’个数,即为至少青蛙数。

但是,由于叫声存在不合法的情况,比如croakcrook,其中字符虽然都是呱声字符,但是并不能形成呱声。我们检查是否存在这种情况,检查逻辑是:

由于呱声,必然是先产生c,再产生r,再产生o,再产生a,最后产生k,因此无论是一只青蛙叫,还是多只青蛙同时叫,croakOfFrogs 输入的叫声字符串的任意索引位置,都满足,出现过的c的个数 >= r的个数 >= o的个数 >= a的个数 >= k的个数。

因此,如果某一个索引位置,统计的字符个数不满足上面条件,则有非法呱声。

另外,当我们遍历完所有字符后,仅仅满足上面条件还是不够的,我们需要考虑下面情况:

crcoakro

即,包含不完整的呱声,此时依旧满足上面条件,但是不合法,即合法的呱声字符串,最终统计的各个字符的数量是要相等的。

算法源码

/*** @param {string} croakOfFrogs* @return {number}*/
var minNumberOfFrogs = function(croakOfFrogs) {let c, r, o, a, k;c = r = o = a = k = 0;let count, max;count = max = 0;for(let char of croakOfFrogs) {switch(char) {case 'c': c++;count++;break;case 'r': r++;break;case 'o': o++;break;case 'a': a++;break;case 'k': k++;count--;break;}if(c >= r && r >= o && o >= a && a >= k) {max = Math.max(max, count)} else {return -1}}if(r === c && o === c && a === c && k === c) {return max} else {return -1}
};

相关内容

热门资讯

柬埔寨“美容女王”遭逮捕,以“... 现年40岁的柬埔寨知名“美容女王”陈斯蕾(Chheng Sreyroth)于14日被捕,柬埔寨警方当...
曼联主场失利:卡拉菲奥里头球破... 在2025-26赛季英超联赛的首轮焦点战中,曼联坐镇老特拉福德球场迎战阿森纳。上半场结束时,阿森纳凭...
佩通坦呼吁恢复其总理职务,本人... 据泰国媒体报道,被停职的泰国总理佩通坦近日向泰国宪法法院提交书面说明,认为6月中旬与柬埔寨参议院主席...
河南省委宣传部常务副部长(正厅... 8月17日,河南省委组织部发布了一则拟任职干部公示,现任省委宣传部常务副部长(正厅级),省电影局局长...
A股突发!1300亿市值芯片巨... 每经编辑|黄胜 8月17日晚,华虹公司(688347.SH)公告称,为解决IPO承诺的同业竞争事项...
央行:下阶段金融政策将从供给侧... 对于下半年货币政策实施,人民银行作出最新部署。近日,人民银行发布2025年第二季度中国货币政策执行报...
10岁孩子不幸溺亡,家长起诉4... 导 读 8月17日,“10岁孩子溺亡家长起诉其4名同伴”相关话题冲上热搜。五名不满12岁的孩子结伴戏...
新《徐州市集中供热条例》10月... 近日,经徐州市第十七届人民代表大会常务委员会第三十三次会议修订通过,江苏省第十四届人民代表大会常务委...
东莞金融市场周报:生益电子17... 本期看点:东莞市科技成果转化基金完成首投;东莞银行首家香港子行开业;生益电子新增投资17.5亿建设算...
降雨集中在今夜!青岛局部大雨或... 明天就要出伏了 但气温并未立即下行 “秋老虎”来了 ↓↓↓ 据中国天气网预报 大范围持续性高温闷热来...