2023华为OD统一考试(A+B卷)题库清单-带答案(持续更新)or2023年华为OD真题机考题库大全-带答案(持续更新)
题目描述:
一群大雁往南飞,给定一个字符串记录地面上的游客听到的大雁叫声,请给出叫声最少由几只大雁发出。具体的
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
输出描述
大雁的数量
用例:
输入->输出
quackquack--> 1
qaauucqckk--> -1
quacqkuac --> 1
qququaauqccauqkkcauqqkcauqqkcaaukccakkkck --> 5
quackqquackuackqqqqquack --> 2
/**思路:最小几只大雁在叫1. 从头取开始遍历的完整的quack2. 遍历字符串统计所有的这个quack中有几个q(t)放在list中3. 在统计全部的字符串中判断能满足这t个q对应数量的quack最小值4. 取list中值跟小于t的最小值比较6. 返回t or n*/
public class CountGeese {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String sound = sc.nextLine();Character[] soundType = {'q','u','a','c','k'};List<Character> record = new ArrayList<>(Arrays.asList(soundType));int value = count(sound,record);System.out.println(value);}//qququaauqccauqkkcauqqkcauqqkcaaukccakkkck quackqquackuackqqqqquackpublic static int count(String sound, List<Character> record){List<Integer> qList = new ArrayList<>();int countq = 0;int index = 0;int len = record.size();//统计满足条件的q值数量for (int i = 0; i < sound.length(); i++){if (sound.charAt(i) == 'q'){countq++;}if (sound.charAt(i) == record.get(index)){if (index == len -1){qList.add(countq);countq = 0;index = 0;continue;}index++;}}if (qList.size() == 0){return -1;}//统计下所有q u a c k的值int q = 0;int u = 0;int a = 0;int c = 0;int k = 0;for (int i = 0; i < sound.length(); i++) {switch (sound.charAt(i)){case 'q':q++;break;case 'u':u++;break;case 'a':a++;break;case 'c':c++;break;case 'k':k++;break;}}//取 q u a c k最小值int min = Math.min(Math.min(Math.min(q, u), Math.min(a, c)), k);Collections.sort(qList,(m,n) -> n-m);for (int i = 0; i < qList.size(); i++){if (qList.get(i) <= min){return (qList.get(i));}}return min;}}