题目描述

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

注意:要想发出蛙鸣 “croak”,青蛙必须 依序 输出 ‘c’, ’r’, ’o’, ’a’, ’k’ 这 5 个字母。如果没有输出全部五个字母,那么它就不会发出声音。

如果字符串 croakOfFrogs 不是由若干有效的 “croak” 字符混合而成,请返回 - 。

样例

输入:croakOfFrogs = "croakcroak"

输出:1

解释:一只青蛙 “呱呱” 两次

输入:croakOfFrogs = "crcoakroak"

输出:2

解释:最少需要两只青蛙,“呱呱” 声用黑体标注

第一只青蛙 "crcoakroak"

第二只青蛙 "crcoakroak"

输入:croakOfFrogs = "croakcrook"

输出:-1

解释:给出的字符串不是 "croak" 的有效组合。

输入:croakOfFrogs = "croakcroa"

输出:-1

提示:

1 <= croakOfFrogs.length <= 10^5

字符串中的字符只有 'c', 'r', 'o', 'a' 或者 'k'

算法分析

1、可以看成有很多个线程对crock进行输出,给定一个字符串,问至少最少有多少个线程才能符合该字符串的输出模式

2、枚举字符串中的每个字符,并对该字符进行记录,其中'c'表示有一个线程刚刚开始,'k'表示有一个线程刚刚结束,枚举每个字符的过程中,更新ans = Math.max(ans,c),ans表示线程的数量,若k == 1,表示有线程结束,需要对c,r,o,a,k的数量全部减1,

3、注意的是:枚举每个字符的过程中,还需要对c,r,o,a,k的数量进行判断,若c < r || r < o || o < a || a < k 和 枚举完所有字符时,若c不为0,表示存在多余的字符,则表示字符串不是 "croak" 的有效组合,

参考了排名第一的Heltion的代码,太简洁了

时间复杂度 $O(n)$

Java 代码

class Solution {

public int minNumberOfFrogs(String croakOfFrogs) {

char[] g = croakOfFrogs.toCharArray();

int c = 0,r = 0,o = 0,a = 0,k = 0,ans = 0;

for(int i = 0;i < croakOfFrogs.length();i ++)

{

char t = g[i];

if(t == 'c') c += 1;

else if(t == 'r') r += 1;

else if(t == 'o') o += 1;

else if(t == 'a') a += 1;

else if(t == 'k') k += 1;

else return -1;

ans = Math.max(ans,c);

if(c < r || r < o || o < a || a < k) return -1;

if(k == 1)

{

c --;

r --;

o --;

a --;

k --;

}

}

if(c != 0) return -1;

return ans;

}

}

java数青蛙_LeetCode 1419. 数青蛙相关推荐

  1. LeetCode - 1419 数青蛙

    题目来源 1419. 数青蛙 - 力扣(LeetCode) 题目描述 给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 "croak" )的组合.由于同 ...

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

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

  3. 【1419. 数青蛙】

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

  4. zabbix监控java线程池,linux线程数限制与zabbix监控

    Linux最大线程数限制及当前线程数查询 最大线程数计算方式: n = total_memory/128k; Linux用户线程数限制而导致的程序异常为 java.lang.OutOfMemoryEr ...

  5. 在Java里怎将字节数转换为我们可以读懂的格式?

    问题:在Java里怎将字节数转换为我们可以读懂的格式? 在Java里怎将字节数转换为我们可以读懂的格式 像1024应该变成"1 Kb",而1024*1024应该变成"1 ...

  6. java判断五位数回文数_【视频+图文】Java经典基础练习题(五):键盘输入一个五位数,判断这个数是否为回文数...

    能解决题目的代码并不是一次就可以写好的 我们需要根据我们的思路写出后通过debug模式找到不足再进行更改 多次测试后才可得到能解决题目的代码! 通过学习,练习[Java基础经典练习题],让我们一起来培 ...

  7. java 根据年月获取周数、天数

    java 根据年月获取周数.天数 大家好,我是酷酷的韩~ 1.根据年月获取周数 /*** @Description: 根据年月获取周数* @Param: [year, month]* @return: ...

  8. java实现数组的奇偶数互换

    java实现数组的奇偶数互换 算法需求 算法思路 代码实现 算法需求 定义一个数组变量,将其中的元素进行调换,奇数放到数组左边,偶数放到数组右边 算法思路 偶数放右边,奇数放左边,可以先for遍历数组 ...

  9. java计算时间的秒数差,去掉周末和节假日

    java计算时间的秒数差,去掉周末和节假日 如题所说,计算两个时间的秒数(工作日),拿到这个需求,首先想到的就是怎么去掉周末和节假日,或者两个时间有一个在周末或节假日,或者两个时间都在,要分别进行处理 ...

  10. Java中输入一个十进制数,如何转换为二进制数

    方法一:利用Java API直接转换 十进制数如何转换为二进制数,这在Java API 中有一个方法,Integer.toBinaryString( ) 括号里面写上你要转换的十进制数,这样可以直接转 ...

最新文章

  1. BZOJ 3105:[cqoi2013]新Nim游戏
  2. 【Thinkphp 5】 整合邮箱类 phpmailer实现邮件发送
  3. centos php5.3 yum 安装 php53-mcrypt
  4. 各大视觉技术竞赛冠军及 TOP 方案集锦(持续更新)
  5. Android10创建文件Permission denied 失败
  6. 好用的php空间,推荐国内三个优质的免费PHP空间
  7. 盘点中兴通讯强悍的战斗力
  8. sqlalchemy 事务
  9. 让系统自动登录的方法
  10. 计算机王码简历,王码五笔字型发明人王永民回首汉字输入这30年
  11. LLDP协议编写要点
  12. java缓存机制面试题,电子版已问世
  13. Java-万元与元之间的换算
  14. python偶数数列求和_Numpy 斐波纳契数列求和
  15. OpenCV之轮廓检测(检测银行卡上的黑色磁条)
  16. 【oracle工具】plsqldev美化规则文件详细解释(关键字大写,标识符小写等规则)
  17. C语言编程之用ellipse画椭圆
  18. 曾国藩语录[修养篇]
  19. 教资报名网站显示无法访问此页面
  20. AltiumDesigner的常用设计总结

热门文章

  1. 《炬丰科技-半导体工艺》晶片键合技术和薄膜传输技术
  2. python读取数据集前十行,python数据分析万字干货!一个数据集全方位解读pandas
  3. php后缀加swp,当编辑文件出现swp的时候如何处理
  4. pix4d无人机影像处理_PhotoScan和Pix4Dmapper的无人机影像快速处理模式对比实验
  5. 网页中有大量图片加载很慢,用什么方法进行优化
  6. SAT数学:必背公式之三角函数
  7. 紫光同创 FPGA 开发跳坑指南(五)—— DDR3 控制器 IP 的仿真
  8. Thymeleaf即时生效
  9. 汽车行业大数据解决方案的应用案例详细分析
  10. 普适计算-2014/03/21