模块六:模拟——1419.数青蛙

文章目录

题目描述

题目链接:1419.数青蛙

算法原理

解法(模拟 + 分情况讨论)

模拟⻘蛙的叫声。

当遇到 'r' 'o' 'a' 'k' 这四个字符的时候,我们要去看看每⼀个字符对应的前驱字符,有没有⻘蛙叫出来。如果有⻘蛙叫出来,那就让这个⻘蛙接下来喊出来这个字符;如果没有,直接返回 -1 ;

当遇到 'c' 这个字符的时候,我们去看看 'k' 这个字符有没有⻘蛙叫出来。如果有,就让这个⻘蛙继续去喊 'c' 这个字符;如果没有的话,就重新搞⼀个⻘蛙。

代码实现

cpp 复制代码
class Solution {
public:
    int minNumberOfFrogs(string croakOfFrogs) {
        const string croak = "croak";
        int n = croak.size();
        vector<int> hash(n);//用数组来模拟哈希表

        unordered_map<char,int> index;//[x,x所对应的下标]
        for(int i = 0;i < n;i++){
            index[croak[i]] = i;
        }

        for(auto ch : croakOfFrogs){
            if(ch == 'c'){
                if(hash[n - 1] != 0){
                    hash[n - 1]--;
                }
                hash[0]++;
            }
            else{
                int i = index[ch];
                if(hash[i - 1] == 0)return -1;
                hash[i - 1]--;
                hash[i]++;
            }
        }
        for(int i = 0;i < n - 1;i++){
            if(hash[i] != 0)return -1;
        }
        return hash[n - 1];
    }
};
相关推荐
晚风醉蝶2 分钟前
1-16-计数排序-CountingSort
python·算法·排序算法
疯狂打码的少年8 分钟前
【数据结构】排序算法:归并排序与基数排序
数据结构·笔记·算法·排序算法
云深处@13 分钟前
【C++设计模式】命令模式
c++·设计模式·命令模式
wuminyu19 分钟前
JDK21 FFM异步读取MSG_ZEROCOPY错误队列揭秘
java·linux·c语言·jvm·c++
吃旺旺雪饼的小男孩35 分钟前
U-Net 语义分割详解:原论文、PyTorch 实现与真实消融实
人工智能·pytorch·python·算法
lucas_AI35 分钟前
35 种开源文档抽取配置,只有 4 个跨过 F1 0.5
人工智能·算法·llm
江安下小雨41 分钟前
muduo网络库(十三):Buffer 缓冲区类
c++·经验分享
练习时长一年的RL研究者41 分钟前
与AI对话后对 Actor-Critic 中 TD Target 的 a‘ 来源总结
算法
大熊背1 小时前
ISP图像处理中大数乘法溢出处理(二)
算法·大数乘法
roman_日积跬步-终至千里1 小时前
【算法3】二叉树中的最大路径和
算法