leetcode 1419 數青蛙

描述:

給你一個字符串 croakOfFrogs,它表示不同青蛙發出的蛙鳴聲(字符串 "croak" )的組合。由於同一時間可以有多隻青蛙呱呱作響,所以 croakOfFrogs 中會混合多個 “croak” 。請你返回模擬字符串中所有蛙鳴所需不同青蛙的最少數目。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/minimum-number-of-frogs-croaking
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

 

**俄羅斯方塊?      滿足 ' c' 'r' 'o' 'c' 'k' 消除一組 ;每次遍歷過程中當且僅當c>=r>=o>=a>=k時才符合要求

‘c’:代表青蛙的數量 

now表示當前存在的青蛙個數,即遇到c時加一,叫完以後(遇到k)減一

遍歷完後now應爲0表示每次叫聲都有頭有尾,記錄now的最大值即爲答案

class Solution:
    def minNumberOfFrogs(self, croakOfFrogs: str) -> int:
        c=r=o=a=k=0
        now=0
        res=0
        for i in croakOfFrogs:
            if i=='c':
                c+=1
                now+=1
                res=max(res,now)
            elif i=='r':
                r+=1
            elif i=='o':
                o+=1
            elif i=='a':
                a+=1
            elif i=='k':
                k+=1
                now-=1
            if not c>=r>=o>=a>=k:
                return -1
        return res if now==0 else -1

附上評論區的大神版本  雖然沒看懂:

python版補上,用字典計數,湊齊一次 ‘croak’ 就消消樂,沒湊齊的時候看看有幾個 ‘c' 同時存在就是需要幾隻青蛙🐸。

class Solution:
    def minNumberOfFrogs(self, croakOfFrogs: str) -> int:
        dic = {'c':0, 'r':0, 'o':0, 'a':0, 'k':0}
        for i in croakOfFrogs:
            dic[i] += 1
        if not dic['c'] == dic['r'] == dic['o'] == dic['a'] == dic['k']:
            return -1
        
        m = 0
        dic = {'c':0, 'r':0, 'o':0, 'a':0, 'k':0}
        for i in range(len(croakOfFrogs)):
            dic[croakOfFrogs[i]] += 1
            if not (dic['c'] >= dic['r'] >= dic['o'] >= dic['a'] >= dic['k']):
                return -1
            if all(val > 0 for val in list(dic.values())):
                for c in 'croak':
                    dic[c] -= 1
            else:
                m = max(m, dic['c'])
        return m
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章