[leetcode] 1419. Minimum Number of Frogs Croaking

Description

Given the string croakOfFrogs, which represents a combination of the string “croak” from different frogs, that is, multiple frogs can croak at the same time, so multiple “croak” are mixed. Return the minimum number of different frogs to finish all the croak in the given string.

A valid “croak” means a frog is printing 5 letters ‘c’, ’r’, ’o’, ’a’, ’k’ sequentially. The frogs have to print all five letters to finish a croak. If the given string is not a combination of valid “croak” return -1.

Example 1:

Input: croakOfFrogs = "croakcroak"
Output: 1 
Explanation: One frog yelling "croak" twice.

Example 2:

Input: croakOfFrogs = "crcoakroak"
Output: 2 
Explanation: The minimum number of frogs is two. 
The first frog could yell "crcoakroak".
The second frog could yell later "crcoakroak".

Example 3:

Input: croakOfFrogs = "croakcrook"
Output: -1
Explanation: The given string is an invalid combination of "croak" from different frogs.

Example 4:

Input: croakOfFrogs = "croakcroa"
Output: -1

Constraints:

  • 1 <= croakOfFrogs.length <= 10^5
  • All characters in the string are: ‘c’, ‘r’, ‘o’, ‘a’ or ‘k’.

分析

题目的意思是:给定一个字符串,问最少由多少个croak字符串组成,其中croak可以分开,这种情况要单独算一种。这道题要找规律,首先统计字符的频率,如果出现了其他字符,则直接返回-1.最后统计出来的频率要相等,否则也要返回-1.如何统计croak的数量呢,用一个cur来统计当前c字符的数量,如果遇见k要减1,维护最小值res就行了,这个要找规律,不然就麻烦,哈哈。

代码

class Solution:
    def minNumberOfFrogs(self, croakOfFrogs: str) -> int:
        d=collections.defaultdict(int)
        cur=0
        res=0
        for ch in croakOfFrogs:
            d[ch]+=1
            if(ch=='c'):
                cur+=1
            elif(ch=='k'):
                cur-=1
            res=max(res,cur)
            if(d['c']<d['r'] or d['r']<d['o'] or d['o']<d['a'] or d['a']<d['k']):
                return -1
        if(d['c']==d['r'] and d['r']==d['o'] and d['o']==d['a'] and d['a']==d['k']):
            return res
        return -1

参考文献

[LeetCode] Py O(n) Sol: Easy to Understand, Ask Doubt

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

农民小飞侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值