数青蛙 ---- 模拟

题目链接

题目:

分析:

  • 题目的意思是:
    一次蛙鸣是一个完整的字符串"croak", 给你一个字符串, 让你求出最少的青蛙数目
    示例一: 两次完整的"croak", 可以由一只青蛙完成, 所以答案为1
    示例二: 第一次蛙鸣还没有结束, 又出现了"c", 说明有第二只青蛙, 所以答案为2
    示例三: 如果有无效的字符, 或蛙鸣不完整, 直接返回-1
  • 我们可以借助哈希表<Character,Integer>
    • 在遍历字符串时, 如果出现"r"字符, 我们要看他前面即"c" 在哈希表中是否存在, 有两种情况:
      如果存在说明此时的"r"是有效字符, 将"c"对应的数量--, 将"r"对应的数量++
      如果不存在, 说明"r"无效, 直接返回-1
    • 同理, 出现"o""a""k", 也要找他们前面的字符在哈希表中的数量是否为0
    • 那么此时, 如果有一次完整的蛙鸣, 那么在"k"对应的数量就会存储下来
    • 如果出现"c", 我们要看是否有已经完成蛙鸣的青蛙(因为我们要找的是最小的数量), 这个数量是存储到"k"对应的哈希表中的, 分两种情况:
      如果"k"对应的哈希表为0, 说明前面没有空闲的青蛙, 所以应该增加蛙的数量, 让"c"对应的哈希表++
      如果"k"对应的哈希表不为0, 说明有空闲的青蛙, 让"k"哈希表--,"c"哈希表++即可
  • 在实现代码时, 我们不需要真的创建哈希表, 只需要用哈希数组即可, 0下标对应"c", 1下标对应"r"...., 想要找到前一个字符的位置, 只需要用String中的index()方法找到下标, 再-1即可

代码:
 

class Solution {public int minNumberOfFrogs(String croakOfFrogs) {String str = "croak";int n = str.length();char[] arr = croakOfFrogs.toCharArray();int[] hash = new int[n];for (char x : arr) {if (x == str.charAt(0)) {if (hash[n - 1] != 0)hash[n - 1]--;hash[0]++;} else {int i = str.indexOf(x);if (hash[i - 1] == 0)return -1;hash[i - 1]--;hash[i]++;}}for (int i = 0; i < hash.length - 1; i++) {if (hash[i] != 0)return -1;}return hash[n - 1];}
}

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

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

相关文章

RTPS协议之Structure

目录 概览RTPS中的各实体和类RTPS实体和类的属性类型&#xff1a;RTPS Entities属性 HistoryCacheCacheChangeRTPS EntityRTPS ParticipantRTPS EndPointRTPS WriterRTPS Reader和DDS Entities的关联DDS DataWriterDDS DataReader 每个RTPS实体和DDS实体是一对一对应的。Histor…

Docker基础篇之Docker容器数据卷

文章目录 1. Docker配置容器卷配置时的一个建议2. Docker容器卷目录3. Docker容器卷案例 1. Docker配置容器卷配置时的一个建议 Docker挂载主机目录访问如果出现cannot open directory.:Permission dnied 解决方法&#xff1a;在挂载目录后加一个–privilegedtrue 如果是Cento…

vivado BD_INTF_NET、BD_INTF_PIN

BD_INTF_NET 描述 接口是一组信号&#xff0c;它们共享一个共同的功能&#xff0c;同时包含 单个信号和多条总线。例如&#xff0c;AXI4Lite主机包含一个 单个信号的数量加上多条总线&#xff0c;这些都是制作 联系通过将这些信号和总线分组到一个接口中&#xff0c;Vivado IP积…

C语言指针用法完善篇

一&#xff0c;指针定义&#xff1a; 1&#xff0c;讲解 指针变量用来记录地址数据&#xff0c;没有记录有效地址的指针变量不可以使用。 定义一个变量A和一个指针B,此时变量A存放在内存1000区间&#xff0c;将变量A赋值给指针变量B&#xff0c;此时指针变量B所接收到的并不是…

彩光大放异彩!《智慧园区以太全光网络建设技术规程》应用案例征集活动结果公布

近日,中国建筑业协会绿色建造与智能建筑分会正式公布了《智慧园区以太全光网络建设技术规程》应用案例征集活动的结果。本次活动旨在推广和应用该规程,进一步推动智慧园区的数字化、智慧化、绿色化建设。众多优秀项目在征集活动中脱颖而出,展示了规程在实际应用中的显著成效。评…

STM32--ESP8266 WiFi模块

前言&#xff1a;此文所述模块为正点原子出版的ATK-ESP8266模块 一、特性参数 ATK-ESP8266 是 ALIENTEK 推出的一款高性能的 UART-WiFi&#xff08;串口-无线&#xff09;模块&#xff0c;ATK-ESP8266 板载了正点原子公司自主开发的 ATK-ESP-01 模块。 该模块是 ATK_ESP8266 的…

MySQL表的增删改查初阶(上篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

防火墙技术基础篇:eNSP配置防火墙主备备份的双机热备

防火墙技术基础篇&#xff1a;配置主备备份的双机热备 防火墙双机热备&#xff08;High Availability, HA&#xff09;技术是网络安全中的一个关键组成部分&#xff0c;通过它&#xff0c;我们可以确保网络环境的高可靠性和高可用性。下面我们一起来了解防火墙双机热备的基本原…

安装存储器的段描述符并加载GDTR

代码清单 ;代码清单12-1;文件名&#xff1a;c12_mbr.asm;文件说明&#xff1a;硬盘主引导扇区代码;创建日期&#xff1a;2011-5-16 19:54&#xff1b;修改于2022-02-16 11:15;设置堆栈段和栈指针mov ax, csmov ss, axmov sp, 0x7c00;计算GDT所在的逻辑段地址12 mov ax, [c…

文件删错后的救赎:恢复与预防策略

日常使用电脑、手机或其他存储设备时&#xff0c;我们时常会遭遇文件删错的尴尬局面。那些原本珍贵或至关重要的文件&#xff0c;可能因为一次意外的点击、一次误操作&#xff0c;甚至是一次设备故障而消失得无影无踪。本文将深入探讨文件删错的定义、原因、恢复方案以及预防措…

上传图片并显示#Vue3#后端接口数据

上传图片并显示#Vue3#后端接口数据 效果&#xff1a; 上传并显示图片 代码&#xff1a; <!-- 上传图片并显示 --> <template><!-- 上传图片start --><div><el-form><el-form-item><el-uploadmultipleclass"avatar-uploader&quo…

16.FreeRTOS直接任务通知 Notification

FreeRTOS 直接任务通知 Notification 介绍 在嵌入式系统开发中&#xff0c;任务间的通信和同步是非常重要的一部分。而FreeRTOS就提供了多种机制来实现这些&#xff0c;比如队列、信号量和事件组。不过&#xff0c;使用这些机制都需要创建一个通信对象&#xff0c;不能直接把事…

This may be due to a blocked port, missing dependencies

安装XAMPPXAMPP之后启动mysql出现如下问题&#xff0c;只需双击XAMPP安装目录下的setup_xampp&#xff0c;等待运行完毕。 重启&#xff0c;双击xampp-control. 重新进入xampp控制界面&#xff0c;点击start。

Python私教张大鹏万字长文讲解Tailwindcss Flex 和 Grid 布局相关的样式,附完整源码和效果截图

flex-basics 样式类 Utilities for controlling the initial size of flex items. 用于控制伸缩项的初始大小的实用程序。 基础样式 ClassPropertiesbasis-0flex-basis: 0px;basis-1flex-basis: 0.25rem; /* 4px */basis-2flex-basis: 0.5rem; /* 8px */basis-3flex-basis:…

JDBC 学习笔记(一)基础篇 - JDBC 搭建的六大步骤

JDK 版本使用&#xff1a;JDK 21 框架思想&#xff1a;实体类及ORM思想 反射技术&#xff1a;BaseDAO 封装的过程 解决现有问题的角度&#xff0c;主要是 JDBC的基础应用 一、、JDBC 可以解决的问题 1.1 数据存储的问题 解决数据长期的存储问题&#xff1a; 数据通过 I/O 流…

城市之旅:使用 LLM 和 Elasticsearch 简化地理空间搜索(一)

作者&#xff1a;来自 Elastic Philipp Kahr, Valentin Crettaz 这篇博文的本地部署实践 Jupyter notebook 请详细阅读文章 “城市之旅&#xff1a;使用 LLM 和 Elasticsearch 简化地理空间搜索&#xff08;二&#xff09;”。 探索如何从自然语言提问创建地理空间搜索。在下…

最新鸿蒙南北开发学习路线+学习资料分享

前言 5月29日&#xff0c;“千帆竞发启航 共筑鸿蒙生态”鸿蒙原生应用合作仪式在北京成功举办&#xff0c;近40个应用现场官宣启动鸿蒙原生应用开发。此次官宣启动开发的鸿蒙原生应用不仅包括教育、母婴、出行、医疗健康等多领域的知名应用&#xff0c;还有十多家企业内部办公应…

OverlayFS在嵌入式系统中的应用

文章目录 抛出问题基本概念使用场景OverlayFS的详细介绍框架目录合并修改文件删除文件添加文件小结 OverlayFS在嵌入式系统中的应用内核配置OverlayFS简单应用OverlayFS应用新思路 总结 环境介绍 硬件&#xff1a;T113平台 软件&#xff1a;Tina5.0 SDK&#xff08;使用的build…

【第3章】SpringBoot实战篇之登录接口(含JWT和拦截器)

文章目录 前言一、JWT1. 什么是JWT2. 使用场景3. 结构3.1 Header3.2 Payload3.3 Signature 4. 使用 二、案例1.引入库2.JwtUtils3. UserController14. ArticleController 三、拦截器1. 定义拦截器2. 注册拦截器 四、测试1. 登录2. 无token3. 有token4. 全局配置 总结 前言 前面…

485通讯网关

在工业自动化与智能化的浪潮中&#xff0c;数据的传输与交互显得尤为重要。作为这一领域的核心设备&#xff0c;485通讯网关凭借其卓越的性能和广泛的应用场景&#xff0c;成为了连接不同设备、不同协议之间数据转换和传输的桥梁。在众多485通讯网关中&#xff0c;HiWoo Box以其…