华为OD机考真题--数大雁--带答案

这篇具有很好参考价值的文章主要介绍了华为OD机考真题--数大雁--带答案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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文章来源地址https://www.toymoban.com/news/detail-621867.html

/**
 思路:最小几只大雁在叫
 1. 从头取开始遍历的完整的quack
 2. 遍历字符串统计所有的这个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  quackqquackuackqqqqquack
    public 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;
    }

}

到了这里,关于华为OD机考真题--数大雁--带答案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包