LeetCode 题解工作台
数青蛙
给你一个字符串 croakOfFrogs ,它表示不同青蛙发出的蛙鸣声(字符串 "croak" )的组合。由于同一时间可以有多只青蛙呱呱作响,所以 croakOfFrogs 中会混合多个 “croak” 。 请你返回模拟字符串中所有蛙鸣所需不同青蛙的最少数目。 要想发出蛙鸣 "croak",青蛙必须…
2
题型
5
代码语言
3
相关题
当前训练重点
中等 · string·结合·计数
答案摘要
我们注意到,如果字符串 `croakOfFrogs` 是由若干有效的 `"croak"` 字符混合而成,那么它的长度一定是 的倍数。因此,如果字符串的长度不是 的倍数,可以直接返回 。 接下来,我们将 `'c'`, `'r'`, `'o'`, `'a'`, `'k'` 这 个字母分别对应下标 到 ,用一个长度为 的数组 记录字符串 `croakOfFrogs` 中每个字母出现的次数,其…
Interview AiBoxInterview AiBox 实时 AI 助手,陪你讲清 string·结合·计数 题型思路
题目描述
给你一个字符串 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" 的有效组合。
提示:
1 <= croakOfFrogs.length <= 105- 字符串中的字符只有
'c','r','o','a'或者'k'
解题思路
方法一:计数 + 模拟
我们注意到,如果字符串 croakOfFrogs 是由若干有效的 "croak" 字符混合而成,那么它的长度一定是 的倍数。因此,如果字符串的长度不是 的倍数,可以直接返回 。
接下来,我们将 'c', 'r', 'o', 'a', 'k' 这 个字母分别对应下标 到 ,用一个长度为 的数组 记录字符串 croakOfFrogs 中每个字母出现的次数,其中 表示当前下标为 的字母出现的次数。另外,我们定义一个整数变量 表示当前未完成蛙鸣的青蛙的数目,需要的青蛙的最少数目 即为 的最大值。
我们遍历字符串 croakOfFrogs 中的每个字母 ,找到 对应的下标 ,然后将 加 。接下来,根据 值的不同,我们分别进行如下操作:
- 如果 ,那么当前有一个新的青蛙开始蛙鸣,因此令 的值加 ,然后我们更新 ;
- 否则,如果 ,那么表示当前没有青蛙可以发出字母 ,无法完成蛙鸣,返回 ,否则我们令 减 。如果 ,那么表示青蛙已经完成了一个蛙鸣,因此令 的值减 。
遍历结束后,如果 ,那么说明青蛙已经完成了所有的蛙鸣,返回 ,否则返回 。
时间复杂度 ,空间复杂度 。其中 是字符串 croakOfFrogs 的长度;而 是字符集的大小,本题中 。
class Solution:
def minNumberOfFrogs(self, croakOfFrogs: str) -> int:
if len(croakOfFrogs) % 5 != 0:
return -1
idx = {c: i for i, c in enumerate('croak')}
cnt = [0] * 5
ans = x = 0
for i in map(idx.get, croakOfFrogs):
cnt[i] += 1
if i == 0:
x += 1
ans = max(ans, x)
else:
if cnt[i - 1] == 0:
return -1
cnt[i - 1] -= 1
if i == 4:
x -= 1
return -1 if x else ans
复杂度分析
| 指标 | 值 |
|---|---|
| 时间 | complexity is O(n) because we iterate through the string once, updating counts and checking order. Space complexity is O(1) since the hashmap only stores fixed counts for 'c','r','o','a','k'. |
| 空间 | Depends on the final approach |
面试官常问的追问
外企场景- question_mark
Check for simultaneous overlapping croaks to assess string plus counting comprehension.
- question_mark
Look for proper validation of sequence order to detect partial or invalid croaks.
- question_mark
Ensure space usage is constant, not scaling with string length, demonstrating counting efficiency.
常见陷阱
外企场景- error
Failing to track multiple frogs simultaneously, leading to undercounting.
- error
Not validating order, allowing sequences like 'crook' to pass incorrectly.
- error
Assuming counts reset after each 'k', missing overlapping croaks from other frogs.
进阶变体
外企场景- arrow_right_alt
Input with multiple overlapping croaks requiring dynamic frog tracking.
- arrow_right_alt
Strings where some croak letters are missing or out of order to test validation.
- arrow_right_alt
Extended patterns with repeated croak sequences increasing concurrency requirements.