标签:array 开头 pre str 题目 lang 字符串 ref lan
这个题一开始我也没啥思路,所以参考了评论区的大佬的解法,然后自己写了点自己的理解。
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;
}
}
标签:array 开头 pre str 题目 lang 字符串 ref lan
原文地址:https://www.cnblogs.com/ZJPaang/p/13572970.html