【华为OD】数大雁

一群大雁往南飞,给定一个字符串记录地面上的游客听到的大雁叫声,请给出叫声最少由
几只大雁发出。具体的:
1. 大雁发出的完整叫声为 "quack" ,因为有多只大雁同一时间嘎嘎作响,所以字符串中可能
会混合多个 "quack"
2. 大雁会依次完整发出 "quack" ,即字符串中‘ q , u , a , c , k ’ 这 5
字母按顺序完整存在才能计数为一只大雁。如果不完整或者没有按顺序则不予计数。
3. 如果字符串不是由‘ q , u , a , c , k ’字符组合而成,或者没有找到一
只大雁,请返回 -1
输入描述:
一个字符串,包含大雁 quack 的叫声。 1 <= 字符串长度 <= 10000
字符串中的字符只有 'q', 'u', 'a', 'c', 'k'
输出描述:
大雁的数量
public class Quack {
    public static void main(String[] args) {
        //获取字符串信息
        Scanner in= new Scanner(System.in);
        String quackStr=in.nextLine();
        Character[] quack={'q','u','a','c','k'};
        List<Character> quackList=new ArrayList<>(Arrays.asList(quack));
        int min = getMin(quackStr, quackList);
        System.out.println(min);
    }

    public static int getMin(String quackStr,List<Character> quackList){
        int qCount=0;
        int index=0;
        int len=quackList.size();
        List<Integer> qList=new ArrayList<>();
        for(int i=0;i<quackStr.length();i++){
            //排除非大雁情况
            if(!quackList.contains(quackStr.charAt(i))){
                return -1;
            }
            //记录q的数量
            if (quackStr.charAt(i)=='q'){
                qCount++;
            }
            //记录一次包含quack完整顺序的q的个数,然后再进行查找
            if(quackStr.charAt(i)==quackList.get(index)){
                if(index==len-1){
                    qList.add(qCount);
                    index=0;
                    qCount=0;
                    continue;
                }
                index++;
            }
        }
        if (qList.size()==0){
            return -1;
        }
        int u=0;
        int a=0;
        int c=0;
        int k=0;
        for (int j=0;j<quackStr.length();j++){
            switch (quackStr.charAt(j)){
                case 'u':
                    u++;
                    break;
                case 'a':
                    a++;
                    break;
                case 'c':
                    c++;
                    break;
                case 'k':
                    k++;
                    break;
            }
        }
        //获取最小的值
        int min=Math.min(Math.min(u,a),Math.min(c,k));
        for (Integer integer : qList) {
            if (integer <= min) {
                return integer;
            }
        }
        return min;
    }


}

华为OD机试 大雁华为公司招聘流程中的其中一项测试环节,用于考察应聘者在编程方面的能力。该笔试主要考察的是计算机基础知识和编程实战能力。 华为OD机试题目通常由一系列算法编程题组成,其中涵盖了数据结构和算法、字符串操作、动态规划、图论、递归、搜索等各个方面的知识点。考生需要根据题目要求,自行设计算法并编写相应的代码,来解决问题。 这一环节的目的是为了考察应聘者在编程方面的能力,包括对算法的理解和实现能力、代码质量和效率等方面的评估。编程能力在今天的软件工程领域中十分重要,能够有效地解决实际问题,提高代码的可读性和可维护性,是评估一个程序员水平的重要指标。 参加华为OD机试大雁,需要具备扎实的计算机基础知识,熟练掌握编程语言和常用的数据结构和算法,并具备理解和分析问题的能力。在备战该笔试的过程中,应聘者应该注重对算法的学习和理解,并进行大量的编程实践,深入理解各类算法的原理与应用场景。在解答算法题时,可以运用递归、分治、贪心、动态规划等常用思想,将问题拆解为更小的子问题,从而更好地解决复杂的算法问题。 华为OD机试大雁一个对程序员编程能力的一种考察方式,参加者需要通过编写代码解决题目,展示自己的编程实力。准备过程中,应聘者应该注意提高自己的算法能力,并进行足够的练习,积累编程经验,从而顺利通过华为OD机试大雁
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值