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

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

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

示例 1:

输入:croakOfFrogs = "croakcroak"
输出:1
解释:一只青蛙 “呱呱” 两次

示例 2:

输入:croakOfFrogs = "crcoakroak"
输出:2
解释:最少需要两只青蛙,“呱呱” 声用黑体标注
第一只青蛙 "crcoakroak"
第二只青蛙 "crcoakroak"

示例 3:

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

示例 4:

输入:croakOfFrogs = "croakcroa"
输出:-1

提示:

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

解题思路

实际上这个问题类似于一个压栈操作,对于五个字符'croak'分别建立栈,然后遍历字符串,对于遍历到的字符,分别压入对应字符栈中。只要栈中的元素个数满足c >= r >= o >= a >= k就是有效的,每个字符栈长度的最大值就是青蛙的个数。当每个字符栈的元素个数都大于0的时候(此时满足一个青蛙叫),我们就可以将每个元素出栈一次,表示一个青蛙。

class Solution:def minNumberOfFrogs(self, cr: str) -> int:res = 0s = {'c':0, 'r':1, 'o':2, 'a':3, 'k':4}st = [0] * 5for i in cr:if st[0] >= st[1] >= st[2] >= st[3] >= st[4]:st[s[i]] += 1res = max(res, st[s[i]])if all(v > 0 for v in st):for c in 'croak':st[s[c]] -= 1else:return -1if st[0] == st[1] == st[2] == st[3] == st[4]:return resreturn -1

实际上当出现'c'的时候就表示出现了一个青蛙,当出现'k'的时候就减少了一个青蛙,那么代码可以这么去写:

class Solution:def minNumberOfFrogs(self, cr: str) -> int:res, frogs = 0, 0st = [0] * 5for i in cr:if i == 'c':st[0] += 1frogs += 1elif i == 'r':st[1] += 1elif i == 'o':st[2] += 1elif i == 'a':st[3] += 1else:st[4] += 1frogs -= 1res = max(res, frogs)if not (st[0] >= st[1] >= st[2] >= st[3] >= st[4]): return -1if st[0] == st[1] == st[2] == st[3] == st[4]:return resreturn -1

reference:

https://leetcode.com/problems/minimum-number-of-frogs-croaking/discuss/586543/C%2B%2BJava-with-picture-simulation

我将该问题的其他语言版本添加到了我的GitHub Leetcode

如有问题,希望大家指出!!!

Leetcode 1419:数青蛙(超详细的解法!!!)相关推荐

  1. LeetCode - 1419 数青蛙

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

  2. Leetcode 1134:阿姆斯特朗数(超详细的解法!!!)

    假设存在一个 k 位数 N,其每一位上的数字的 k 次幂的总和也是 N,那么这个数是阿姆斯特朗数. 给你一个正整数 N,让你来判定他是否是阿姆斯特朗数,是则返回 true,不是则返回 false. 示 ...

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

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

  4. leetcode 1419 数青蛙

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

  5. Leetcode 29:两数相除(超详细的解法!!!)

    给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 1: 输 ...

  6. Leetcode 37:解数独(超详细的解法!!!)

    编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 3x3 ...

  7. Leetcode 503:下一个更大元素 II(超详细的解法!!!)

    给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它 ...

  8. Leetcode 1162:地图分析(超详细的解法!!!)

    你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 0 和 1 标记好了.其中 0 代表海洋,1 代表陆地,你知道距离陆地区域最远的海洋区域是是哪一个吗 ...

  9. Leetcode 1229:安排会议日程(超详细的解法!!!)

    你是一名行政助理,手里有两位客户的空闲时间表:slots1 和 slots2,以及会议的预计持续时间 duration,请你为他们安排合适的会议时间. 「会议时间」是两位客户都有空参加,并且持续时间能 ...

  10. Leetcode 496:下一个更大元素 I(超详细的解法!!!)

    给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x 的下一个更 ...

最新文章

  1. OpenCV中 Mat 按行或按列合并程序
  2. Ctrl+C提示是否终止shell脚本
  3. java导入lucene_如何导入lucene的.jar包 ?
  4. 使用 Portainer UI 管理 Docker 主机
  5. 2021-04-24 Python 最小二乘法求解线性回归模型
  6. Linux服务器日常巡检脚本分享
  7. python爬虫天气预报_Python爬虫实例扒取2345天气预报
  8. 常犯的18个统计学错误, 避坑防雷指南!
  9. AE点击按钮添加栅格
  10. Apache RocketMQ 深圳沙龙报名开启!
  11. 最常见并发面试题整理!(速度收藏)
  12. Java数据库篇3——SQL
  13. 通过结构体某个成员的地址计算结构体首地址
  14. Bash(Shell)基础知识
  15. c java http通讯,c语言经过http请求javaee项目
  16. 计算机机房综合布线方案,计算机网络设备施工方案(不含综合布线)(word版)
  17. nx.adjacency_matrix(G).todense()计算邻接矩阵与真实结果不一致
  18. android自定义矩形框,Android 中自定义长方形
  19. 【热门】牛宝宝取名大全:女孩带点诗意唯美柔情的名字
  20. linux jq 数组,linux shell脚本 用jq命令在JSON文件肿添加一个map或数组

热门文章

  1. 手写数字的分割和识别
  2. 自备ACM模板 —— 数据结构篇
  3. 华为od统一考试B卷【5键键盘】Java 实现
  4. RGBA图像的四通道详细分析
  5. 56岁才创业, 如今年利润却是华为1.6倍
  6. 汽车专场 | 新能源汽车动力电池PACK CAE分析实例解读
  7. 英语软件的日志怎么写
  8. 计算机c盘要满了电脑会卡吗,电脑老是用一段时间就C盘空间满啦运行卡的很,问下该如何解决清理C盘?...
  9. 小梅哥三段式状态机按键消抖改写
  10. C++版 PPyolo+部署记录