LeetCode 1419. 数青蛙

题目链接

1419. 数青蛙

题目思路

这个题一开始我也没啥思路,所以参考了评论区的大佬的解法,然后自己写了点自己的理解。

代码

class Solution {
    public int minNumberOfFrogs(String croakOfFrogs) {
        char[] str = croakOfFrogs.toCharArray();
        //如果字符为空或者字符长度不是5的倍数或者字符串不是以c开头或者字符串不是以k结尾的情况都为不能构成完整croak的情况。
        if(str.length == 0 || str[0] != 'c' || str[str.length - 1] != 'k' || str.length % 5 != 0){
            return -1;
        }
        //用于统计每个字符出现的次数
        int[] bucket = new int[127];
        int res = 0;
        for(char x : str){
            bucket[x]++;
            //因为题目要求按照顺序才能算正确,如果遍历过程中出现任意一次字符乱序的情况,代表整个字符串的有序性就被破坏了,直接返回不成立条件
            if(bucket['c'] < bucket['r'] || bucket['r'] < bucket['o'] || bucket['o'] < bucket['a'] || bucket['a'] < bucket['k']){
                return -1;
            }
            //这里如果出现了新的c,代表着这是另外一个croak的出现,那么这里就有可能要更新res,分两种情况。
            //第一种情况是前面刚好完成一次croak的过程,那么当前这个c就可以由上次叫完的青蛙继续叫。
            //第二种情况就是如果在croak过程中插入了一个新的c,那么这个新的c就需要由第二只青蛙来完成。
            if(x == 'c'){
                res = Math.max(bucket['c'] - bucket['k'], res);
            }
        }
        return res;
    }
}
posted @ 2020-08-27 18:11  ZJPang  阅读(150)  评论(0编辑  收藏  举报