LeetCode1419

力扣1419题

题目描述:数青蛙

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

请你返回模拟字符串中所有蛙鸣所需不同青蛙的最少数目。

要想发出蛙鸣 “croak”,青蛙必须 依序 输出 ‘c’, ’r’, ’o’, ’a’, ’k’ 这 5 个字母。如果没有输出全部五个字母,那么它就不会发出声音。如果字符串 croakOfFrogs 不是由若干有效的 “croak” 字符混合而成,请返回 -1 。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-number-of-frogs-croaking
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1683335663173.jpg

题解思路:

参考一个答主写的思路,设计的很巧妙,通过建一个一维数组num[],长度为5,用来存放五个字符的状态,k表示叫完了,对于其他4个字母:

  • 0:叫了
  • 1:没叫

返回-1的情况:

​ ① 第一个字母不是 c

​ ② 遍历到当前位置,发现croak的顺序不连,即num[i-1]=0

​ ③ 遍历结束之后,前四个字母不相等

代码如下:

class Solution {
        public int minNumberOfFrogs(String croakOfFrogs) {
        //1.遍历字符串
        //2.新建一个数组,存放青蛙的个数
        int[] num = new int[5];
        for (int i=0; i<croakOfFrogs.length();i++){
            //第一个字母必须是 'c'
            if (croakOfFrogs.charAt(0) != 'c'){
                return -1;
            }
            if (croakOfFrogs.charAt(i) == 'c'){
                if (num[4] != 0){//不处理
                    --num[4];
                }
                ++num[0];
            }else if (croakOfFrogs.charAt(i) == 'r'){
                if (num[0] == 0){
                    return -1;
                }
                ++num[1];
                --num[0];
            }else if (croakOfFrogs.charAt(i) == 'o'){
                if (num[1] == 0){
                    return -1;
                }
                ++num[2];
                --num[1];
            }else if (croakOfFrogs.charAt(i) == 'a'){
                if (num[2] == 0){
                    return -1;
                }
                ++num[3];
                --num[2];
            }else if (croakOfFrogs.charAt(i) == 'k'){
                if (num[3] == 0){
                    return -1;
                }
                ++num[4];
                --num[3];
            }
        }

        //判断返回
        return (num[0] == 0 && num[1] == 0 && num[2] == 0 && num[3] == 0) ? num[4] : -1;
    }
}

猜你喜欢

转载自blog.csdn.net/Miss_croal/article/details/130519759
今日推荐