力扣解题思路:1419. 数青蛙

1419. 数青蛙


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

输入:croakOfFrogs = "croakcroak"
输出:1 
解释:一只青蛙 “呱呱” 两次

输入:croakOfFrogs = "crcoakroak"
输出:2 
解释:最少需要两只青蛙,“呱呱” 声用黑体标注
第一只青蛙 "crcoakroak"
第二只青蛙 "crcoakroak"

输入:croakOfFrogs = "croakcrook"
输出:-1
解释:给出的字符串不是 "croak" 的有效组合。

我刚开始看这个题目以为和括号匹配是类似的,以为要用栈来解决,心想那也太复杂了吧。但是后来发现这两种题型不一样,因为这个不仅可以嵌套,还可以错位。这一题有点类似于消消乐游戏,条件满足时消除一组,所有都消除完则证明是有效组合:

首先我们用c,r,o,a四个变量来记录字符出现的次数
当遇到k时,我们就把c,r,o,a数量都减一最后,我们判断c,r,o,a是否都为0,为0则说明croakOfFrogs的确是一堆蛙叫声
判断的时候还有一个细节,即需要保证c >= r >= o >= a

但是这个时候我们还没有判断青蛙的数量,当遇到k时,我们先不着急对croa数量减一,先看当前c的值,c值就代表青蛙的数量(举个例子:若c为2,则说明在同一时刻有两只青蛙在叫,因为此时还没有遇到需要消除字母的k,也就是此时c的数目就是不同的青蛙数)
我们使用maxFrogs来记录c的数量,若c大于maxFrogs则将它的值赋给maxFrogs,最后返回maxFrogs即可:

    public int minNumberOfFrogs(String croakOfFrogs) {
        char[] chars = croakOfFrogs.toCharArray();
        if (chars.length < 5 || chars[chars.length - 1] != 'k') {
            return -1;
        }
        int maxFrogs = 0;
        int c = 0, r = 0, o = 0, a = 0;
        for (char ch : chars) {
            switch (ch) {
                case 'c':
                    c++;
                    break;
                case 'r':
                    r++;
                    if (r > c) {
                        return -1;
                    }
                    break;
                case 'o':
                    o++;
                    if (o > r) {
                        return -1;
                    }
                    break;
                case 'a':
                    a++;
                    if (a > o) {
                        return -1;
                    }
                    break;
                case 'k':
                    maxFrogs = Math.max(maxFrogs, c);
                    c--;r--;o--;a--;
                    break;
            }
        }
        if (c + r + o + a > 0) {
            return -1;
        }
        return maxFrogs;
    }

这是我能找到的最简单最容易理解的版本,看完还是一头雾水的小伙伴可以参考这里哦。

你可能感兴趣的:(力扣解题思路:1419. 数青蛙)