力扣 1419. 数青蛙

news2024/9/19 10:37:16

力扣 1419. 数青蛙

1. 题目

在这里插入图片描述

2. 思路

  • 本题就是一道 字符串模拟题;
  1. 题目说到了, 会混杂着青蛙的叫声, 如果字符串 croakOfFrogs 不是由若干有效的 “croak” 字符混合而成,请返回 -1, 那就是说如果有多余的 'c', 'r', 'o'等等, 比如 "croakcroa"
  2. 题目说了, 同一时间内可以有多只青蛙呱呱作响, 但是求的是模拟蛙鸣需要的不同青蛙的最少数目;
    1. 在这里插入图片描述
    2. 见上图, 都是 3个 croak, 为什么左边最少需要青蛙的个数就是3只, 而右边需要青蛙的最少数量就可以是2只?
      1. 一只青蛙叫完一定是按照顺序, 依次去发出 c, r, o, a, k这5个字母的, 最终结尾一定是'k', 一旦出现这种 croakx(x指的是任意字符)字符k之后还有其他的字符, 一定是不完整的蛙声, 即 return -1;也就是说我们可以遍历叫声字串,能最终到了'k'(如果不按顺序的, 比如 crkoa, k 之前应该是 a, 这样是到不了k的)说明收集到完整的青蛙蛙鸣, 那么过程中怎么统计青蛙数量?【判定是最少的】记住,遇到'c'起始说明是需要青蛙叫的(可以是之前的青蛙, 或者一只新的青蛙);具体思路如下:
    3. 可以将青蛙叫分成5种:
      3.1 刚才发出了 c 的声音;
      3.2 刚才发出了 r 的声音;
      3.3 刚才发出了 o 的声音;
      3.4 刚才发出了 a 的声音;
      3.5 刚才发出了 k 的声音;
    4. 遍历croakOfFrogs, 例如当前遍历到 r,那么就看看有没有青蛙刚才发出了 c 的声音,如果有,那么才能让它接着发出 r 的声音;
      4.1 用一个哈希表(数组)cnt 来维护这 c r o a k这五种青蛙的个数【cnt['c'] = 3, 说明发出 'c' 的 青蛙有3只】, 然后可能的种类就这么几种情况:
      4.2 遍历到 字符 'c'时,看看有没有青蛙刚才发出了 字符'k'的声音,如果有,那么复用这只青蛙(认为他还可以接着发出 下一个 蛙鸣 croak),让它接着发出 字符 'c'的声音,即 cnt[‘k’]-- 和 cnt[‘c’]++;如果没有这种青蛙,那么直接新产生一只青蛙发出 c 的声音,即 cnt[‘c’]++;
      4.3 遍历到 'r'时,看看有没有青蛙刚才发出了 字符 'c'的声音,如果有,那么复用这只青蛙,(同一只青蛙)让它接着发出 r 的声音,即 cnt[‘c’]-- 和 cnt[‘r’]++;如果没有这种青蛙,由于题目要求青蛙必须从 c 开始蛙鸣,不能直接从 r 开始【即 cnt[‘c’] == 0, 不能直接r开始】,所以返回 −1;
      4.4 遍历到 o,a,k的情况类似 r, 我们要做的就是找到这个字母的上一个字母对应映射cnt[‘x’] 有没有 > 0, 有就 -1, 说明可以复用, 并且当前的字母的cnt值+1, 但是 如果上一个字母的 cnt 值等于 0,那么就返回 −1
    5. 遍历结束后,所有青蛙必须在最后发出 k 的声音,如果有青蛙在最后发出的声音不是 k(也就是 cnt 值大于 0),那么返回 −1,否则返回 cnt[k];

3. 代码

class Solution {
public:
    int minNumberOfFrogs(string croakOfFrogs) {
        const int N = 256;
        // 预处理,croak 每个字母的前一个值是什么
        vector<char> vctPre(N);    // 不然也可以用 map
        const string croak = "croakc";
        // c pre is k
        // r pre is c
        // 
        for (int i = 1; i < 6; ++i){

            // vctPre 存放的是(下标即当前 字符) 当前字符对应的 前一个字符是啥, 比如 'r' -> 'c')
            // 不然就得一个一个写 if else
            // croak[i - 1] = 'c'
            // ASCII码 vctPre['r'] = 'c' 即 r 的 前一个字符是 c
            vctPre[croak[i]] = croak[i - 1];
        }

        // 遍历一遍string 叫声字串
        vector<int> res(N, 0); // 统计结果的 res
        for(const auto& frog : croakOfFrogs){
            auto pre = vctPre[frog];    // 要知道当前字符的前一个字符是什么?
            if (res[pre]){
                // 按照顺序下来, 前一个字符有值, 可以复用这只青蛙
                res[pre]--;
            }else if (frog != 'c'){
                // 不然的话, 青蛙一定得从 c 开始蛙鸣
                return -1;
            }
            res[frog]++;
        }
        if (res['c'] || res['r'] || res['o'] || res['a']){
            return -1;  // 有发出其他的声音的青蛙
        }
        return res['k'];    // 最后所有的青蛙都发出'k'

    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2102474.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】机器学习引领未来:赋能精准高效的图像识别技术革新

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀目录 &#x1f50d;1. 引言&#x1f4d2;2. 机器学习基础与图像识别原理&#x1f341;机器学习概述&#xff1a;监督学习、无监督学习与强化学…

「深入理解」HTML Meta标签:网页元信息的配置

「深入理解」HTML Meta标签&#xff1a;网页元信息的配置 HTML的<meta>元素用于提供关于HTML文档的元数据&#xff08;metadata&#xff09;&#xff0c;这些信息对于浏览器和其他处理HTML文档的应用程序来说是非常有用的&#xff0c;如&#xff1a;<base>、<li…

虚幻引擎VR游戏开发02 | 性能优化设置

常识&#xff1a;VR需要保持至少90 FPS的刷新率&#xff0c;以避免用户体验到延迟或晕眩感。以下是优化性能的一系列设置&#xff08;make sure the frame rate does not drop below a certain threshold&#xff09; In project setting-> &#xff08;以下十个设置都在pr…

用于全栈自动化测试的最佳Python工具

我知道大多数测试人员会说Java是他们创建自动化测试的首选语言。 但是我最喜欢的是Python。为什么?为什么是Python ? Al Sweigart&#xff0c;《自动化那些无聊的东西》的作者&#xff0c;Python一直是他的首选语言&#xff0c;因为:它有一个温和的学习曲线。它适用于Windows…

42.哀家要长脑子了!

1.965. 单值二叉树 - 力扣&#xff08;LeetCode&#xff09; 深度优先搜索&#xff0c;看边两端的结点是不是一样的值 class Solution { public:bool isUnivalTree(TreeNode* root) {if(!root) return true;if(root->right) {if(root->val ! root->right->val || …

数字图像处理基础:图像处理概念、步骤、方式介绍

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

5.2.数据结构-c/c++二叉树详解(下篇)(算法面试题)

本章所有代码请见&#xff1a;5.3.数据结构-c/c二叉树代码-CSDN博客 上篇:5.数据结构-c/c二叉树详解(上篇)&#xff08;遍历方法&#xff0c;完全二叉树&#xff09;-CSDN博客 目录 1 求二叉树 第k层的节点 2 查找一个节点是否在二叉树中 3 求二叉树节点的个数 4 求二叉树…

c#笔记5 详解事件的内置类型EventHandler、windows事件在winform中的运用

为什么要研究这一问题&#xff1f; 事件和委托可以说是息息相关。 前面先解释了什么是委托&#xff0c;怎么定义一个委托以及怎么使用匿名方法来内联地新建委托。 事实上事件这一机制在c#的程序开发中展很重要的地位&#xff0c;尤其是接触了winform软件开发的同学们应该都知…

chapter12-异常(Exception)——(注解)——day14

444-异常处理入门 445-异常基本介绍 446-异常体系图 虚线代表 实现接口&#xff0c;实线代表继承 447-五大运行时异常 448-异常课堂练习 449-异常处理机制 450-tryCatch异常处理 1&#xff09;如果异常发送&#xff0c;则异常发生后面的代码不会执行&#xff0c;直接进入到Catc…

接口报错403 Forbidden 【已解决】

接口报错403 Forbidden 【已解决】 在Web开发中&#xff0c;接口请求错误是开发者经常遇到的问题之一。其中&#xff0c;403 Forbidden错误尤为常见&#xff0c;它表明服务器理解了客户端的请求&#xff0c;但是拒绝执行此请求。本文将深入探讨接口请求403 Forbidden错误&#…

iMazing 3官方中文版软件新功能全面解析,最好用的ios设备管理软件

iMazing 3是一款专为iOS设备设计的全面管理软件&#xff0c;想要更换设备的用户&#xff0c;iMazing 3的数据迁移功能能确保无缝切换。iMazing 3不仅提供了强大的备份和恢复功能&#xff0c;确保用户数据安全无虞&#xff0c;还实现了设备与电脑间的高效文件传输。无论是照片、…

浅析SVG无功补偿器在新能源发电中的应用

引言 随着新能源技术的不断进步&#xff0c;光伏发电已经崛起为未来能源发展的一个关键领域&#xff0c;各地纷纷建立起越来越多的光伏电站。然而&#xff0c;光伏发电领域仍面临诸多挑战&#xff0c;包括电网电压不稳定、发电过剩以及电压波动等问题。在这样的背景下&#xf…

《零散知识点 · Kafka 知识拓展》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

【教学类-56-04】数感训练——数字04(中2班寻找自己的学号数字,1号-29号,出现5-10\10-15\15-20次)

背景需求&#xff1a; 今天有个客户购买“学号版的数感训练” 我找到文件夹&#xff0c;发现里面没有1-40号的学号数感&#xff0c;只有上学期为重4班制作的1-31号&#xff08;其中缺了1和7号&#xff09;的数感训练模版 于是用代码重新生成 【教学类-56-03】数感训练——数字…

HarmonyOS开发实战( Beta5版)Swiper高性能开发指南

背景 在应用开发中&#xff0c;Swiper 组件常用于翻页场景&#xff0c;比如&#xff1a;桌面、图库等应用。Swiper 组件滑动切换页面时&#xff0c;基于按需加载原则通常会在下一个页面将要显示时才对该页面进行加载和布局绘制&#xff0c;这个过程包括&#xff1a; 如果该页面…

学习算法需要数学知识吗?

目录 算法与数学:看似不可分割的关系常见算法中的数学元素案例分析:不需要高深数学知识的算法1. 二分查找2. 深度优先搜索 (DFS)3. 动态规划:斐波那契数列 如何在有限的数学背景下学习算法1. 专注于算法的逻辑和过程2. 可视化算法流程3. 从简单的实现开始,逐步优化4. 学习算法设…

centos7使用ifconfig查看IP,终端无ens33信息解决办法

1.问题描述 大概有十几天没用虚拟机&#xff0c;最后一次用忘记关闭虚拟机系统了&#xff1b;突然&#xff0c;发现我用远程连接工具&#xff0c;连接不上&#xff0c;去到虚拟机内部查看IP发现终端竟然没有输出enss33地址信息&#xff0c;额&#xff0c;就像下面这样。 2.解决…

android so的加载流程(Android 13~14)

序言 分析环境: Android 13~14 其实大佬 << 安卓so加载流程源码分析 >> 已经写得非常好了,我就没必要再写了 建议读者看看这篇文字,比较新,质量很高<< 安卓so加载流程源码分析 >> 为什么要分析 android so的加载流程 ??? 我想明白 so是怎么打…

无人机之反制系统篇

无人机的反制系统是一个复杂而精细的系统&#xff0c;旨在应对无人机的不当使用或潜在威胁。该系统通常由多个关键部分组成&#xff0c;包括搜索系统、光电跟踪系统、射频干扰系统及显控单元等&#xff0c;这些部分共同协作以实现对无人机的有效反制。以下是对无人机反制系统的…

SpringBoot开发——初步了解SpringBoot

文章目录 一、SpringBoot简介1、什么是Spring Boot2、Spring Boot的优点3、Spring Boot功能 二、Spring与Spring Boot对比三、Spring Boot与Spring MVC四、Spring Boot体系结构五、Springboot Initializr1、Spring Initializr2、Spring Initializr模块 一、SpringBoot简介 1、…