描述:
給你一個字符串 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