数青蛙 ---- 模拟

题目链接

题目:

分析:

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

    }
}
相关推荐
wangjialelele2 分钟前
二刷C语言后,一万字整理细碎知识点
c语言·开发语言·数据结构·c++·算法·cpp
yu_anan1113 分钟前
CTC Prefix Score计算
算法·机器学习
Stardep5 分钟前
算法入门21——二分查找算法——山脉数组的峰顶索引
数据结构·算法·leetcode
mjhcsp5 分钟前
P3145 [USACO16OPEN] Splitting the Field G(题解)
开发语言·c++·算法
空空潍6 分钟前
hot100-合并区间(day14)
c++·算法·leetcode
橘颂TA8 分钟前
【剑斩OFFER】算法的暴力美学——力扣 675 题:为高尔夫比赛砍树
数据结构·算法·c·结构与算法
rit84324999 分钟前
UVE算法提取光谱特征波长的MATLAB实现与应用
开发语言·算法·matlab
是娇娇公主~9 分钟前
算法——【最大子数组和】
数据结构·c++·算法
tkevinjd11 分钟前
力扣hot100-283移动零(盲人拉屎)
算法·leetcode
POLITE315 分钟前
Leetcode 94. 二叉树的中序遍历 104. 二叉树的最大深度 226. 翻转二叉树 101. 对称二叉树 (Day 13)
算法·leetcode·职场和发展