华为机考 数大雁怎么确定最大 大雁数目呀。
题目描述
一群大雁往南飞,给定一个字符串记录地面上的游客听到的大雁叫声,请给出叫声最少由几只大雁发出。
具体的:
1.大雁发出的完整叫声为”quack“,因为有多只大雁同一时间嘎嘎作响,所以字符串中可能会混合多个”quack”。
2.大雁会依次完整发出”quack”,即字符串中’q’ ,‘u’, ‘a’, ‘c’, ‘k’ 这5个字母按顺序完整存在才能计数为一只大雁。如果不完整或者没有按顺序则不予计数。
3.如果字符串不是由’q’, ‘u’, ‘a’, ‘c’, ‘k’ 字符组合而成,或者没有找到一只大雁,请返回-1。
输入描述
一个字符串,包含大雁quack的叫声。1 <= 字符串长度 <= 1000,字符串中的字符只有’q’, ‘u’, ‘a’, ‘c’, ‘k’。
我的核心代码:
public static void main(String [] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
char[] quack = str.toCharArray();
int sum = 0;
//叫声合法字符数目
int q = 0, u = 0, a = 0, c = 0;
outfor:
for (char ch : quack) {
switch (ch) {
case 'q':
q++;
break;
case 'u':
//只有u<q时,这个u才是合法字符
if(u<q) u++;
break;
case 'a':
if(a<u)a++;
break;
case 'c':
if(c<a) c++;
break;
case 'k':
if (c > 0) {
//问题就是这里了,因为如果不完整或者没有按顺序则不予计数,所以会有很多不符合条件的输入,我感觉我这样写这q肯定是超大雁数的。但是我感觉我也不知道怎么进行判断
sum = Math.max(sum, q);
q--;u--;a--; c--;
}
break;
default:
sum=-1;
break outfor;
}
}
System.out.println(sum);
}

