(思維 + 字符串)1419. 數青蛙

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

注意:要想發出蛙鳴 "croak",青蛙必須 依序 輸出 ‘c’, ’r’, ’o’, ’a’, ’k’ 這 5 個字母。如果沒有輸出全部五個字母,那麼它就不會發出聲音。

如果字符串 croakOfFrogs 不是由若干有效的 "croak" 字符混合而成,請返回 -1 。

 

示例 1:

輸入:croakOfFrogs = "croakcroak"
輸出:1 
解釋:一隻青蛙 “呱呱” 兩次
示例 2:

輸入:croakOfFrogs = "crcoakroak"
輸出:2 
解釋:最少需要兩隻青蛙,“呱呱” 聲用黑體標註
第一隻青蛙 "crcoakroak"
第二隻青蛙 "crcoakroak"
示例 3:

輸入:croakOfFrogs = "croakcrook"
輸出:-1
解釋:給出的字符串不是 "croak" 的有效組合。
示例 4:

輸入:croakOfFrogs = "croakcroa"
輸出:-1
 

提示:

1 <= croakOfFrogs.length <= 10^5
字符串中的字符只有 'c', 'r', 'o', 'a' 或者 'k'

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

題解:該題可以借鑑 “有效的括號” 的思路,遇到 r 的時候要保證 c 的數量 >= r 的數量,遇到 o 的時候要保證 c 的數量 & r 的數量 >= o 的數量……  直到遇到 k ,此時要保證 c、r、o、a的數量要 > 0 ; 此期間 c 數量的最大值即爲ans

class Solution {
public:
    
    int minNumberOfFrogs(string str) {
        int len = str.length();
        if(len%5 || !len) return -1;
        int c=0,r=0,o=0,a=0,k=0,ans=0;
        for(int i=0;i<len;i++){
            if(str[i]=='c') c++;
            else if(str[i]=='r'){
                r++;
                if(c<r) return -1;
            }
            else if(str[i]=='o'){
                o++;
                if(c<o || r<o) return -1;
            }
            else if(str[i]=='a'){
                a++;
                if(c<a || r<a || o<a) return -1;
            }
            else{
                if(!c) return -1; else c--;
                if(!r) return -1; else r--;
                if(!o) return -1; else o--;
                if(!a) return -1; else a--;
            }
            ans=max(ans,c);
        }
        return ans;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章