算法

1419. 数青蛙

2023-05-05  本文已影响0人  红树_

江无回头浪,人无再少年。年华若虚度,老来恨不浅。时光容易逝,岁月莫消遣。碌碌而无为,生命不值钱。

LC每日一题,参考1419. 数青蛙,难度分1690。

题目

给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 "croak" )的组合。由于同一时间可以有多只青蛙呱呱作响,所以 croakOfFrogs 中会混合多个 “croak”
请你返回模拟字符串中所有蛙鸣所需不同青蛙的最少数目。

输入:croakOfFrogs = "crcoakroak"
输出:2 
解释:最少需要两只青蛙

解题思路

统计词频

class Solution {
    public int minNumberOfFrogs(String croakOfFrogs) {
        if(croakOfFrogs.length() %5 != 0) return -1;
        int ans = 0;
        //判断c字符数量 和 k字符数量前后关系 最小即为最大的c-k区间(cCount-kCount)
        int cCount = 0,rCount = 0,oCount = 0,aCount = 0,kCount = 0;
        for(char c : croakOfFrogs.toCharArray()) {
            if(c == 'c') ans = Math.max(ans,++cCount-kCount);
            else if(c == 'r') rCount++;
            else if(c == 'o') oCount++;
            else if(c == 'a') aCount++;
            else if(c == 'k') kCount++;
            //判断先后关系
            if(cCount < rCount || rCount < oCount || 
               oCount < aCount || aCount < kCount) return -1;
        }
        //判断数量关系
        if(cCount != rCount || rCount != oCount || 
           oCount != aCount || aCount != kCount) return -1;
        return ans;
    }
}

复杂度分析

上一篇下一篇

猜你喜欢

热点阅读