java数青蛙_LeetCode 1419. 数青蛙
题目描述
给你一个字符串 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. 数青蛙相关推荐
- LeetCode - 1419 数青蛙
题目来源 1419. 数青蛙 - 力扣(LeetCode) 题目描述 给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 "croak" )的组合.由于同 ...
- LeetCode 1419. 数青蛙(脑洞题)
1. 题目 给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 "croak" )的组合. 由于同一时间可以有多只青蛙呱呱作响,所以 croakOfFro ...
- 【1419. 数青蛙】
来源:力扣(LeetCode) 描述: 给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 "croak" )的组合.由于同一时间可以有多只青蛙呱呱作响, ...
- zabbix监控java线程池,linux线程数限制与zabbix监控
Linux最大线程数限制及当前线程数查询 最大线程数计算方式: n = total_memory/128k; Linux用户线程数限制而导致的程序异常为 java.lang.OutOfMemoryEr ...
- 在Java里怎将字节数转换为我们可以读懂的格式?
问题:在Java里怎将字节数转换为我们可以读懂的格式? 在Java里怎将字节数转换为我们可以读懂的格式 像1024应该变成"1 Kb",而1024*1024应该变成"1 ...
- java判断五位数回文数_【视频+图文】Java经典基础练习题(五):键盘输入一个五位数,判断这个数是否为回文数...
能解决题目的代码并不是一次就可以写好的 我们需要根据我们的思路写出后通过debug模式找到不足再进行更改 多次测试后才可得到能解决题目的代码! 通过学习,练习[Java基础经典练习题],让我们一起来培 ...
- java 根据年月获取周数、天数
java 根据年月获取周数.天数 大家好,我是酷酷的韩~ 1.根据年月获取周数 /*** @Description: 根据年月获取周数* @Param: [year, month]* @return: ...
- java实现数组的奇偶数互换
java实现数组的奇偶数互换 算法需求 算法思路 代码实现 算法需求 定义一个数组变量,将其中的元素进行调换,奇数放到数组左边,偶数放到数组右边 算法思路 偶数放右边,奇数放左边,可以先for遍历数组 ...
- java计算时间的秒数差,去掉周末和节假日
java计算时间的秒数差,去掉周末和节假日 如题所说,计算两个时间的秒数(工作日),拿到这个需求,首先想到的就是怎么去掉周末和节假日,或者两个时间有一个在周末或节假日,或者两个时间都在,要分别进行处理 ...
- Java中输入一个十进制数,如何转换为二进制数
方法一:利用Java API直接转换 十进制数如何转换为二进制数,这在Java API 中有一个方法,Integer.toBinaryString( ) 括号里面写上你要转换的十进制数,这样可以直接转 ...
最新文章
- BZOJ 3105:[cqoi2013]新Nim游戏
- 【Thinkphp 5】 整合邮箱类 phpmailer实现邮件发送
- centos php5.3 yum 安装 php53-mcrypt
- 各大视觉技术竞赛冠军及 TOP 方案集锦(持续更新)
- Android10创建文件Permission denied 失败
- 好用的php空间,推荐国内三个优质的免费PHP空间
- 盘点中兴通讯强悍的战斗力
- sqlalchemy 事务
- 让系统自动登录的方法
- 计算机王码简历,王码五笔字型发明人王永民回首汉字输入这30年
- LLDP协议编写要点
- java缓存机制面试题,电子版已问世
- Java-万元与元之间的换算
- python偶数数列求和_Numpy 斐波纳契数列求和
- OpenCV之轮廓检测(检测银行卡上的黑色磁条)
- 【oracle工具】plsqldev美化规则文件详细解释(关键字大写,标识符小写等规则)
- C语言编程之用ellipse画椭圆
- 曾国藩语录[修养篇]
- 教资报名网站显示无法访问此页面
- AltiumDesigner的常用设计总结
热门文章
- 《炬丰科技-半导体工艺》晶片键合技术和薄膜传输技术
- python读取数据集前十行,python数据分析万字干货!一个数据集全方位解读pandas
- php后缀加swp,当编辑文件出现swp的时候如何处理
- pix4d无人机影像处理_PhotoScan和Pix4Dmapper的无人机影像快速处理模式对比实验
- 网页中有大量图片加载很慢,用什么方法进行优化
- SAT数学:必背公式之三角函数
- 紫光同创 FPGA 开发跳坑指南(五)—— DDR3 控制器 IP 的仿真
- Thymeleaf即时生效
- 汽车行业大数据解决方案的应用案例详细分析
- 普适计算-2014/03/21