华为OD机试 - 掌握单词个数(Java 2024 D卷 100分)

news2024/12/23 9:59:55

在这里插入图片描述

华为OD机试 2024D卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(D卷+C卷+A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

有一个字符串数组 words 和一个字符串 chars 。

假如可以用 chars 中的字母拼写出 words 中的某个“单词”(字符串),那么我们就认为你掌握了这个单词。

words 的字符仅由 a-z 英文小写字母组成,例如 “abc” chars 由 a-z 英文小写字母和 “?” 组成。其中英文问号 “?” 表示万能字符,能够在拼写时当做任意一个英文字母。例如:“?” 可以当做 “a” 等字母。

注意:每次拼写时,chars 中的每个字母和万能字符都只能使用一次。

输出词汇表 words 中你掌握的所有单词的个数。没有掌握任何单词,则输出 0。

二、输入描述

第 1 行输入数组 words 的个数,记为 N。 从第 2 行开始到第 N+1 行一次输入数组 words 的每个字符串元素。 第 N+2 行输入字符串 chars。

三、输出描述

输出一个整数,表示词汇表 words 中你掌握的单词个数。

1、输入

4
cat
bt
hat
tree
atach

2、输出

2

3、说明

atach可以拼写出单词cat和hat,因此掌握的单词是2个。

四、解题思路

要解决这个问题,我们需要以下几个步骤:

  1. 读取输入:
    • 首先读取单词数组 words 的个数 N。
    • 读取 N 个单词并存储在 words 列表中。
    • 读取包含可用字符的字符串 chars。
  2. 统计字符频率:
    • 统计 chars 中每个字符(包括万能字符 ?)的频率。
  3. 验证单词是否可拼写:
    • 对于每个单词,检查其每个字符是否可以由 chars 中的字符构成,考虑万能字符 ?。
    • 使用一个字典来记录 chars 中字符的剩余使用次数,在验证过程中逐个减少字符的可用次数。
  4. 计算掌握的单词个数:
    • 如果一个单词可以被拼写出来,则增加掌握的单词计数。

五、Java算法源码

public class Test01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读取单词的数量
        int n = Integer.parseInt(scanner.nextLine());
        String[] words = new String[n];

        // 读取所有单词
        for (int i = 0; i < n; i++) {
            words[i] = scanner.nextLine();
        }

        // 读取可用字符的字符串
        String chars = scanner.nextLine();
        scanner.close();

        // 输出掌握的单词个数
        System.out.println(countMasteredWords(words, chars));
    }

    public static int countMasteredWords(String[] words, String chars) {
        // 统计 chars 中每个字符的频率
        Map<Character, Integer> charCount = new HashMap<>();
        for (char ch : chars.toCharArray()) {
            charCount.put(ch, charCount.getOrDefault(ch, 0) + 1);
        }

        int masteredWordsCount = 0;

        // 验证每个单词是否可以由 chars 中的字符拼写出来
        for (String word : words) {
            if (canSpell(word, new HashMap<>(charCount))) {
                masteredWordsCount++;
            }
        }

        return masteredWordsCount;
    }

    public static boolean canSpell(String word, Map<Character, Integer> charCount) {
        int wildcardCount = charCount.getOrDefault('?', 0);

        for (char ch : word.toCharArray()) {
            if (charCount.getOrDefault(ch, 0) > 0) {
                charCount.put(ch, charCount.get(ch) - 1);
            } else if (wildcardCount > 0) {
                wildcardCount--;
            } else {
                return false;
            }
        }

        return true;
    }
}

六、效果展示

1、输入

4
cat
bt
hat
tree
at?ch

2、输出

3

3、说明

at?ch可以拼写出单词cat、hat和bt,因此掌握的单词是3个。

在这里插入图片描述


🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 C卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(D卷+C卷+A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1865291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spark运行spark-shell与hive运行时均报错的一种解决方案

环境按照尚硅谷的配置的。 在运行hive的时候&#xff0c;报错代码为30041&#xff0c;无法执行insert语句。 在运行spark-shell的时候&#xff0c;报错&#xff0c;无法进入到shell脚本中。 可能的问题&#xff1a; 对集群设置的域名与集群的主机名称不一致。 例如&#xff1a;…

C#之Delta并联机械手的视觉相机标定与形状匹配

本文导读 上节课程我们讲述了如何建立Delta并联机械手正逆解&#xff0c;本节课程我们主要讲解如何通过C#语言开发正运动Delta并联机械手视觉流水线同步分拣的视觉部分。 VPLC711硬件介绍 VPLC711是正运动推出的一款基于x86平台和Windows操作系统的高性能机器视觉EtherCAT运…

75. UE5 RPG 创建场景摆放部件蓝图

这一篇文章来点简单的内容&#xff0c;相当于我们使用蓝图创建类似于unity的预制体。 创建一个一个柱子蓝图 首先&#xff0c;我们创建一个立柱的蓝图&#xff0c;将我们之前创建的柱子上面含有火焰和灯光的部分合并成一个蓝图&#xff0c;方便往场景内添加。 点击创建一个基…

Docker系列之安全

Docker的安全前言一、Docker 容器与虚拟机的区别 1. 隔离与共享 2. 性能与损耗二、Docker 存在的安全问题 1.Docker 自身漏洞 2.Docker 源码问题三、 Docker 架构缺陷与安全机制 1. 容器之间的局域网攻击 2. DDoS 攻击耗尽资源 3. 有漏…

ACL 2023事件相关(事件抽取、事件关系抽取、事件预测等)论文汇总

ACL 2023事件抽取相关(事件抽取、事件关系抽取、事件预测等)论文汇总&#xff0c;后续会更新全部的论文讲解。 Event Extraction Code4Struct: Code Generation for Few-Shot Event Structure Prediction 数据集&#xff1a;ACE 2005 动机&#xff1a;与自然语言相比&#xf…

利用maven命令往本地仓库添加jar包

一&#xff1a;遇到问题 有些jar包在中央仓库没有&#xff0c;需要手动往本地仓库添加&#xff0c;方便以后打包使用。 比如&#xff1a;添加红框这个依赖&#xff0c;现在爆红 二&#xff1a;解决办法 **第一步&#xff1a;**打开idea&#xff0c;找到运行按钮旁边的框&am…

Android集成高德地图SDK(2)

1.解压下载的压缩包&#xff0c;找到AMap_Android_SDK_All\AMap3DMap_DemoDocs\AMap_Android_API_3DMap_Demo\AMap3DDemo\app\libs&#xff0c;复制libs里的所有文件&#xff0c;将其粘贴到Android工程的libs目录下&#xff0c;如图所示。 2.打开app下的build.gradle&#xff0…

无忧易售升级:一键设置图片分辨率,赋能十大跨境电商平台

在电商领域&#xff0c;产品图片的品质直接影响着顾客的购买决策与品牌形象的塑造。无忧易售ERP特推出图片分辨率修改功能&#xff0c;为电商卖家们提供更专业的图像优化工具&#xff0c;让每一像素都成为吸引客户的秘密武器&#xff01; 一、Allegro、OZON、Coupang、Cdiscou…

数据分析python基础实战分析

数据分析python基础实战分析 安装python&#xff0c;建议安装Anaconda 【Anaconda下载链接】https://repo.anaconda.com/archive/ 记得勾选上这个框框 安装完后&#xff0c;然后把这两个框框给取消掉再点完成 在电脑搜索框输入"Jupyter"&#xff0c;牛马启动&am…

低代码:释放企业创新力的钥匙

近年来&#xff0c;随着信息技术的不断发展&#xff0c;企业对于快速开发应用程序的需求越来越迫切。然而&#xff0c;传统的软件开发过程常常耗时费力&#xff0c;限制了企业的创新潜力。于是&#xff0c;低代码应运而生&#xff0c;成为解决开发难题的一把利器。 低代码开发…

完整代码Python爬取豆瓣电影详情数据

完整代码Python爬取豆瓣电影详情数据 引言 在数据科学和网络爬虫的世界里&#xff0c;豆瓣电影是一个丰富的数据源。在本文中&#xff0c;我们将探讨如何使用Python语言&#xff0c;结合requests和pyquery库来爬取豆瓣电影的详情页面数据。我们将通过一个具体的电影详情页面作…

节流工具,避免操作太频繁

ThrottleUtil 用于保证某个操作在一定时间内只执行一次的工具。 package com.cashpro.kash.lending.loan.utils;/*** <pre>* Created by zhuguohui* Date: 2024/6/26* Time: 13:43* Desc:用于节流执行任务,限制任务执行的频次* </pre>*/import android.os.Handle…

给前端小白的11个建议(少走弯路)

作为一个编程4年的的前端工程师&#xff0c;一路走来踩过许多坑。希望我的经验能让你少踩些坑&#xff0c;在编程的路上走的更顺些&#xff01; 1. 禁用var声明 只使用const或let声明变量。并且首选const&#xff0c;当一个变量需要重新赋值时&#xff0c;才使用let。并且在创…

旧衣回收小程序开发:回收市场的新机遇

当下&#xff0c;旧衣服回收已经成为了一种流行趋势&#xff0c;居民都将闲置的衣物进行回收&#xff0c;旧衣回收市场规模在不断增加。随着市场规模的扩大&#xff0c;为了让居民更加便利地进行回收&#xff0c;线上回收小程序也应运而生&#xff0c;为大众打造了一个线上回收…

windows安装Nacos并使用

Nacos&#xff08;前身为阿里巴巴的Nacos Config和Nacos Discovery&#xff09;是一个开源的动态服务发现、配置和服务管理平台&#xff0c;由阿里巴巴开发并维护。它提供了一种简单且易于使用的方式来管理微服务架构中的服务注册、发现和配置管理。 主要功能包括&#xff1a;…

[leetcode]move-zeroes 移动零

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:void moveZeroes(vector<int>& nums) {int n nums.size(), left 0, right 0;while (right < n) {if (nums[right]) {swap(nums[left], nums[right]);left;}right;}} };

web渗透-SSRF漏洞及discuz论坛网站测试

一、简介 ssrf(server-side request forgery:服务器端请求伪造&#xff09;是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下&#xff0c;ssrf是要目标网站的内部系统。(因为他是从内部系统访问的&#xff0c;所有可以通过它攻击外网无法访问的内部系统&…

一文搞懂Linux多线程【下】

目录 &#x1f6a9;多线程代码的健壮性 &#x1f6a9;多线程控制 &#x1f6a9;线程返回值问题 &#x1f6a9;关于Linux线程库 &#x1f6a9;对Linux线程简单的封装 在观看本博客之前&#xff0c;建议大家先看一文搞懂Linux多线程【上】由于上一篇博客篇幅太长&#xff0c;为…

一键掌握多渠道推广效果!Xinstall超级渠道功能,让你的App推广更高效

在App运营的大潮中&#xff0c;如何高效、精准地推广App&#xff0c;成为每一位运营者关注的焦点。传统的推广方式&#xff0c;如地推、代理、分销、广告等&#xff0c;虽然能够带来一定的用户增长&#xff0c;但如何衡量推广效果、如何与合作伙伴结算、如何管理下属渠道等问题…

一个项目学习Vue3---快速认识TypeScript

问题1&#xff1a;什么是TypeScript TypeScript是一种由微软开发的开源编程语言&#xff0c;它是JavaScript的一个超集。TypeScript添加了静态类型检查功能&#xff0c;并且可以编译为纯JavaScript代码&#xff0c;使得开发者可以利用JavaScript的生态系统和工具。TypeScript的…