题目来源

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}
};

LeetCode - 1419 数青蛙相关推荐

  1. LeetCode 1419. 数青蛙(脑洞题)

    1. 题目 给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 "croak" )的组合. 由于同一时间可以有多只青蛙呱呱作响,所以 croakOfFro ...

  2. leetcode 1419 数青蛙

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

  3. 【1419. 数青蛙】

    来源:力扣(LeetCode) 描述: 给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 "croak" )的组合.由于同一时间可以有多只青蛙呱呱作响, ...

  4. 数青蛙​、[USACO10FEB]Chocolate Giving S

    一.1419. 数青蛙 思路 这道题有俩种解法,一是记数,二是贪心 记数: 这是官方的题解 我们用frog_ num来表示现在正在发出蛙鸣声的青蛙数目,用cnt[c] 示已经发出-次有效蛙鸣中的字符c ...

  5. LeetCode 三数之和 — 优化解法

    LeetCode 三数之和 - 改进解法 题目:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复 ...

  6. LeetCode1419. 数青蛙

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

  7. java数青蛙_第十一届蓝桥杯第三场软件类省赛 C++ B组 题解

    试题 A: 数青蛙 "一只青蛙一张嘴,两只眼睛四条腿.两只青蛙两张嘴,四只眼睛八条腿.三只青蛙三张嘴,六只眼睛十二条腿.--二十只青蛙二十张嘴,四十只眼睛八十条腿." 请问上面这段 ...

  8. Leetcode 1419:数青蛙(超详细的解法!!!)

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

  9. java数青蛙_『字节跳动LeetCode联合周赛』--周赛185(JavaScript) | OFEII

    前言

最新文章

  1. linux内核syscall_define6,Syscall系统调用Linux内核跟踪
  2. 如何构建企业出海的“免疫力“?深入解读阿里云CDN安全能力
  3. C语言开发笔记(八)static
  4. JVM笔记(一)数字在JVM中的表示
  5. 让sublime text显示空格,到底是点还是横杠TabError: inconsistent use of tabs and spaces in indentation
  6. 腾讯还在提高围棋AI绝艺的棋力,柯洁说已经超过当年AlphaGo
  7. 大前端页面布局插件收藏
  8. 1.1 echo rem cd dir命令
  9. 10种微信公众号的推广吸粉方法
  10. 什么是DTC?为什么国内外如此火爆
  11. 世界上最会“算计”的公司争相布局区块链,普华永道等四大会计师事务所的变革之路...
  12. Jmeter实战:零基础也能看懂的性能测试
  13. 网络流行简笔画图片大全,网络的简笔画图片
  14. 老程序员教你如何提高开发效率、成为大神1——人文思维进化与信众
  15. c语言已知加速度求位移速度,知道初速度知道加速度求位移的公式
  16. 计算机实验室主要工作业绩范文,实验室工作总结
  17. 把梳子卖给和尚的故事
  18. 整车电源状态 K15 KL30 KL31
  19. 人民币纸币采用防伪油墨
  20. 牧牛图-南怀瑾上师讲解

热门文章

  1. 【规律】Hzy's Rabbit Play
  2. git cheatsheet
  3. git第一次提交代码至远程仓库
  4. Linux中cp(拷贝)命令
  5. 一文读懂Tiger DAO VC模式,风险投资改朝换代
  6. 微博爬虫数据分析可视化程序设计报告
  7. 体感ar数字互动教学制作实现学生共享优质教育
  8. 蚂蚁java一二三面面经
  9. 太极安装的应用打开闪退_BUG:通过太极阴创建应用什么值得买的过程中太极闪退,应用创建失败...
  10. vue 分割面板组件