当前位置: 首页 > article >正文

[算法】模拟:(leetcode)1419.数青蛙(medium)

本篇使用c++

目录

1、题目链接

2、题目介绍

3、思路分析

问题分析

解题思路

4、代码

💗感谢阅读!💗


1、题目链接

1419. 数青蛙 - 力扣(LeetCode)


2、题目介绍

给你一个字符串 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'


3、思路分析

问题分析

如果字符串中的字符

  • 不是这些字符的有效组合,
  • 或者字符的顺序不正确,

那么该字符串就不是有效的蛙鸣声组合。

解题思路

  1. 检查字符串长度:首先,检查输入字符串 croakOfFrogs 的长度是否是 5 的倍数。因为每个 "croak" 包含 5 个字符,所以如果不是 5 的倍数,则无法构成有效的蛙鸣声组合,直接返回 -1。

  2. 初始化变量

    • 使用一个长度为 5 的数组 hash 来记录每个字符('c', 'r', 'o', 'a', 'k')在字符串中出现的次数。
    • 使用变量 res 来记录模拟字符串中所有蛙鸣所需的不同青蛙的最少数目,初始化为 0。
    • 使用变量 now 来表示当前正在发出蛙鸣声但尚未完成的青蛙数量,初始化为 0。
  3. 遍历字符串

    • 遍历字符串 croakOfFrogs 中的每个字符。
    • 如果遇到字符 'c',表示有一只新的青蛙开始发出蛙鸣声,将 hash[0] 和 now 分别增加 1,并更新 res 为 max(res, now),因为可能出现了新的同时发声的青蛙。
    • 如果遇到字符 'r', 'o', 'a',则只将对应位置的 hash 值增加 1,不改变 now 或 res 的值。同时,检查这些字符的数量是否满足顺序要求(即后面的字符数量不应超过前面的字符数量),如果不满足,则返回 -1。
    • 如果遇到字符 'k',表示一只青蛙完成了它的蛙鸣声,将 hash[4] 增加 1,并将 now 减少 1。这表示有一只青蛙完成了叫声,不再占用发声位置。
  4. 检查结束条件

    • 遍历结束后,检查 now 是否为 0。如果不为 0,说明有青蛙开始了叫声但没有完成,这表示字符串不是有效的蛙鸣声组合,返回 -1。
    • 如果 now 为 0,且没有在其他地方返回 -1,则说明字符串是有效的蛙鸣声组合,返回 res 作为结果。

4、代码

class Solution {
public:
    int minNumberOfFrogs(string croakOfFrogs) {

        //限制条件:字符串长度不满足5倍数,
        if (croakOfFrogs.size() % 5 != 0)
            return -1;

        int hash[5] = { 0 };//哈希记录croak字符出现次数

        int res = 0; //记录模拟字符串中所有蛙鸣所需的不同青蛙的最少数目

        int now = 0;//表示当前正在发出蛙鸣声,但尚未完成的青蛙数量(动态变化)
                   
        
        for (int i = 0; i < croakOfFrogs.size(); i++)
        {
            //crcoakroak
            //hash 0  1  2  3   4
            //      2 2  2   2  2
            //res 2
            //now 1

            if (croakOfFrogs[i] == 'c')
            {
                hash[0]++;
                now++;
                res = max(res, now);
            }
            else if (croakOfFrogs[i] == 'r')
            {
                hash[1]++;
            }
            else if (croakOfFrogs[i] == 'o')
            {
                hash[2]++;
            }
            else if (croakOfFrogs[i] == 'a')
            {
                hash[3]++;
            }
            else
            {
                hash[4]++;
                now--;
            }

            if (!(hash[0] >= hash[1] && hash[1] >= hash[2] && hash[2] >= hash[3] && hash[3] >= hash[4]))
            {
                return -1;
            }
        }

        //全部遍历完毕,但是还有青蛙没有完全发出croak,因此不符合条件
        if (now != 0) return -1;

        return res;
    }
};


💗感谢阅读!💗



http://www.kler.cn/a/324716.html

相关文章:

  • IPv6 NDP 记录
  • 【CANOE】【学习】【DecodeString】字节转为中文字符输出
  • 【Android、IOS、Flutter、鸿蒙、ReactNative 】静态数组
  • web安全漏洞之ssrf入门
  • 大数据新视界 -- 大数据大厂之 Impala 性能优化:基于数据特征的存储格式选择(上)(19/30)
  • 微信小程序进行md5加密 ,base64 转码
  • 5 apache poi实现excel的动态下拉框功能
  • 1.1.5 计算机网络的性能指标(上)
  • 力扣 最小覆盖子串
  • 胤娲科技:AI程序员——重塑编程世界的魔法师
  • Spring Boot影院管理系统:小徐的创新
  • 02_OpenCV图片写入
  • select和epoll的详细区别
  • 基于Springboot+Vue的高校教室资源管理系统的设计与实现(含源码+数据库)
  • Oracle表空间管理(三)
  • Open WebUI部署自己的大模型
  • 基于微信小程序的智慧社区的设计与实现
  • 如何使用Kimi编写商品管理设计文档:包含流程图和用例图
  • Springboot+PostgreSQL+MybatisPlus存储JSON或List、数组(Array)数据
  • 【数据治理-设计数据标准】
  • 数据库入门不再难:克服学习障碍的实用技巧与演示
  • 《北方牧业》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • 甄选范文“论软件架构建模技术与应用”,软考高级论文,系统架构设计师论文
  • 工程设备包括哪些内容?
  • Vue和axios零基础学习
  • 基于nodejs+vue的宠物医院管理系统