LeetCode 1419. 数青蛙

题解

思维:

  1. croak 这是青蛙会发出的声音。
  2. 定义cnt 来分别记录 c 叫了几声,r 叫了几声,o叫了几声,a叫了几声,k叫了几声。
  3. 定义pre来记录每个叫声的前一个叫声。 如果当前为‘c’, 就需要判断之前是否有青蛙发出了k的声音,如果有,那么pre–, 当前叫声 ++,那么这只青蛙可以继续开始,如果没有,那么需要一个青蛙来叫。
  4. 如果当前为‘r’,就需要判断之前是否有青蛙发出了‘c’的声音,如果有的话,就用这只青蛙,pre–,当前叫声++;如果没有,那么就不能叫,返回-1;
  5. 其他的判断和4是一样的。
  6. 最终每个青蛙是要叫出完整的croak,所以最终输出k的叫了几声,就能判断需要几只青蛙。

代码

class Solution {
public:
    int minNumberOfFrogs(string croakOfFrogs) {
        int n = croakOfFrogs.size();
        char pre['s'];
        string ini = "croakc";
        for(int i = 1; i < ini.size(); i++){
            pre[ini[i]] = ini[i-1];
        }
        int cnt['s'] = {0};
        for(int i = 0; i < croakOfFrogs.length(); i++){
            // cout<<pre[croakOfFrogs[i]]<<'\n';

            if(cnt[pre[croakOfFrogs[i]]] !=0){
                cnt[pre[croakOfFrogs[i]]]--;

            }else if(croakOfFrogs[i] != 'c'){
                return -1;
            }
            cnt[croakOfFrogs[i]]++;   
        }
        if(cnt['c'] || cnt['r']||cnt['o']|| cnt['a']){
            return -1;
        }
        return cnt['k'];

    }
};



# 参考
https://leetcode.cn/problems/minimum-number-of-frogs-croaking/solutions/2257845/bie-xiang-tai-fu-za-mo-ni-ti-
ba-liao-pyt-9t87/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值