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

leetcode 1419 数青蛙

一、题目描述

二、解题思路

整体思路

整体上,我们可以采用模拟+哈希表的思想来解决数青蛙问题。

具体思路

(1)首先进行边界处理,如果croakOfFrogs字符串的长度不为"croak"长度的整数倍,则代表一定鸣叫不成功,直接返回-1;

(2)哈希表pre用于记录“croak”字符串每一个字符的前一个字符,便于查找,先将哈希表pre按要求初始化;

(3)哈希表Croak用于模拟青蛙鸣叫,遍历字符串croakOfFrogs,如果当前字符为'c',则代表有一只青蛙开始鸣叫,Croak['c']++;

(4)如果当前字符不为'c',则需要检查Croak[pre[x]]是否为0:

<1>如果为零,则代表鸣叫不合法,直接返回-1;

<2>如果不为零,则代表可以继续往后鸣叫,再将Croak[pre[x]]--,Croak[x]++;

(5)遍历完字符串croakOfFrogs后,如果Croak['c'],Croak['r'],Croak['o'],Croak['a']均为0则代表鸣叫均完成,返回Croak['k']即可。否则,则代表有鸣叫未完成,返回-1。

注意:由于要求最少的青蛙数,所有当当前字符为'c',即需要新的青蛙开始鸣叫时,先检查Croak['k']是否为0,即是否有青蛙已经鸣叫完:

<1>如果不为0,则拎一只旧青蛙开始鸣叫(Croak['k']--;Croak['c']++;);

<2>如果为0,表示当前无青蛙已经完成鸣叫,直接将Croak['c']++即可。

三、代码实现

时间复杂度:T(n)=O(n)

空间复杂度:S(n)=O(1)

class Solution {
public:int minNumberOfFrogs(string croakOfFrogs) {//模拟+哈希//边界处理if(croakOfFrogs.size()%5!=0) return -1;unordered_map<char,char> pre;//初始化哈希表pre,键为当前字符,值为前一个字符pre['r']='c';pre['o']='r';pre['a']='o';pre['k']='a';//哈希表Croak用于模拟青蛙鸣叫unordered_map<char,int> Croak;for(auto x:croakOfFrogs){if(x=='c') {if(Croak['k']>=1) Croak['k']--;Croak['c']++;}//如果前面的字符未出现if(x!='c'&&Croak[pre[x]]==0) return -1;if(x!='c'&&Croak[pre[x]]!=0){Croak[x]++;Croak[pre[x]]--;}}//判定模拟结果是否合法if(Croak['c']==0&&Croak['r']==0&&Croak['o']==0&&Croak['a']==0)return Croak['k'];return -1;}
};


文章转载自:

http://BxV9NkEo.ryxdr.cn
http://CEVlYzrJ.ryxdr.cn
http://E4j3198O.ryxdr.cn
http://2Yvx4vlM.ryxdr.cn
http://UZ7pMzWC.ryxdr.cn
http://oeLBOeTT.ryxdr.cn
http://80aQfHOC.ryxdr.cn
http://tvIKzOD0.ryxdr.cn
http://hEL0fM2g.ryxdr.cn
http://1m5FCYau.ryxdr.cn
http://gvPWPppg.ryxdr.cn
http://ue7avG2J.ryxdr.cn
http://Io8BQgmL.ryxdr.cn
http://hlGRbjjZ.ryxdr.cn
http://1EikjBSO.ryxdr.cn
http://5xXZ5dYj.ryxdr.cn
http://3ViZL4qg.ryxdr.cn
http://b01zXF5X.ryxdr.cn
http://NQdi4PsB.ryxdr.cn
http://Dss66tzx.ryxdr.cn
http://aWc0u7fL.ryxdr.cn
http://gp6JZeFd.ryxdr.cn
http://M6mrPmGF.ryxdr.cn
http://1xosteu6.ryxdr.cn
http://NRUCPlq4.ryxdr.cn
http://1k2s14rs.ryxdr.cn
http://0N2t8wRP.ryxdr.cn
http://fSNP38tT.ryxdr.cn
http://lfCcGtIE.ryxdr.cn
http://aKv4yAh2.ryxdr.cn
http://www.dtcms.com/a/367589.html

相关文章:

  • 蔚来汽车前制动器设计及热性能分析cad+三维图+设计说明书
  • 唯品会获得vip商品详情 API 返回值说明
  • Java对接Kafka的三国演义:三大主流客户端全景评测
  • 2020年_408统考_数据结构41题
  • 简单例子实现 字符串搜索替换
  • Python/JS/Go/Java同步学习(第三篇)四语言“切片“对照表: 财务“小南“纸切片术切凭证到崩溃(附源码/截图/参数表/避坑指南/老板沉默术)
  • 【IO】共享内存、信息量集
  • CmakeLists.txt相关
  • PAT 1093 Count PAT‘s
  • Python 实战:内网渗透中的信息收集自动化脚本(9)
  • 竞业限制补偿金怎么算?一次性支付要交税吗?人事系统帮你理清这些坑!
  • 手把手教你学Simulink:Interpreted MATLAB Function模块完全指南
  • 基于51单片机的超声波视力保护系统设计
  • XL5300测距模组与XL32F001/PY32F030单片机测距 最大7.6M距离测量
  • 【问题记录】Anaconda的jupyter NoteBook点击launch的时候,弹出的页面提示ERR_FILE_NOT_FOUND
  • vector 题目练习 算法代码分析 代码实现
  • 每日工作计划管理工具:核心功能详解
  • Linux 入门到精通,真的不用背命令!零基础小白靠「场景化学习法」,3 个月拿下运维 offer,第二十六天
  • 【VLMs篇】05: MiniCPM-V 4.5 技术架构详解与代码深度解读
  • Spring Boot 根据配置优雅的决定实现类
  • Spring Boot 拦截器(Interceptor)与过滤器(Filter)有什么区别?
  • 揭秘“强关联”世界的隐形力量:科学家首次实现对复杂材料的“化学级”精确模拟
  • 个股场外期权行权期限有哪些规定?
  • fpga iic协议
  • 关于嵌入式学习——嵌入式硬件3
  • Function Call实战:用GPT-4调用天气API,实现实时信息查询
  • 2025年热门视频转文字工具测评,助你快速把视频转成文字稿!
  • 基于SpringBoot的家政保洁预约系统【2026最新】
  • C语言中calloc函数
  • flowable基础入门