数青蛙 ---- 模拟

题目链接

题目:

分析:

  • 题目的意思是:
    一次蛙鸣是一个完整的字符串"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即可

代码:

java 复制代码
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];

    }
}
相关推荐
wabs6665 小时前
关于贪心算法的思考
算法·贪心算法
2601_957884846 小时前
面向内容合规性的短视频矩阵分发机制:感知哈希去重与语义检索优化实践
矩阵·音视频·哈希算法
社交怪人6 小时前
【判断大小】信息学奥赛一本通C语言解法(题号1043)
算法
Snasph6 小时前
GNU Make 用户手册(中文版)
服务器·算法·gnu
江澎涌6 小时前
拆解与 AI 的一次对话
人工智能·算法·程序员
sheeta19987 小时前
LeetCode 每日一题笔记 日期:2026.06.02 题目:3635. 最早完成陆地和水上游乐设施的时间 II
笔记·算法·leetcode
Lsk_Smion7 小时前
力扣实训 _ [102].层序遍历--前序--后续_递归与非递归的实现
数据结构·算法·leetcode
小欣加油9 小时前
leetcode3751 范围内总波动值I
java·数据结构·c++·算法·leetcode
Halo_tjn9 小时前
反射与设计模式1
java·开发语言·算法
V搜xhliang024610 小时前
临床科研新范式:从选题到投稿,AI智能体如何接管全流程?
运维·数据结构·人工智能·算法·microsoft·数据挖掘·自动化