【2024最新华为OD-C卷试题汇总】单词大师 (100分) - 支持在线评测+三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新华为OD-C卷的三语言AC题解

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

文章目录

  • 前言
    • 🎀关于华为OD
    • 🧭 机试备考指南
    • 单词大师
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 样例输入
      • 样例输出
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 🍓OJ题目截图

前言

🎀关于华为OD

🧭 机试备考指南

  • 华为OD的题库大半年跟新一次,也就是说,一旦跟新,那么本年用的题目就是从该题库种选题,大概有100~200道左右

  • 最近考试换为C/D卷,C/D卷题库是一样的,D卷为双机位监控,某些外包公司应聘的为D卷。

  • 为此清隆帮大家搜集并整理了C卷的题库,后续会由清隆的ACM银牌团队将题目整理后搬上OJ,支持在线评测

  • 暂时不对外开放,需要内部体验名额的宝子可以私信清隆领取评测名额哦~

单词大师

问题描述

给定一个字符串数组 w o r d s words words 和一个字符串 c h a r s chars chars。如果可以用 c h a r s chars chars 中的字母拼写出 w o r d s words words 中的某个单词,则认为你掌握了这个单词。 w o r d s words words 中的字符仅由小写字母 a − z a-z az 和特殊字符 ? 组成,其中 ? 可以代表任意一个字母。

注意:拼写时, c h a r s chars chars 中的每个字母只能使用一次,? 也只能使用一次。

请输出你能够拼写出的 w o r d s words words 中的单词数量。如果一个也拼写不出,则输出 0 0 0

输入格式

第一行输入一个整数 N N N,表示数组 w o r d s words words 的长度。

接下来 N N N 行,每行输入一个字符串,表示 w o r d s words words 中的一个单词。

最后一行输入一个字符串 c h a r s chars chars

其中, 1 ≤ N ≤ 100 1 \le N \le 100 1N100 1 ≤ w o r d [ i ] . l e n g t h , c h a r s . l e n g t h ≤ 100 1 \le word[i].length, chars.length \le 100 1word[i].length,chars.length100

输出格式

输出一个整数,表示你能够拼写出的 w o r d s words words 中的单词数量。

样例输入

4
cat
bt
hat
tree
atach??

样例输出

3

样例输入

3
hello
world
cloud
welldonehoneyr

样例输出

2

样例输入

3
apple
car
window
welldoneapplec?

样例输出

2

数据范围

  • 1 ≤ N ≤ 100 1 \le N \le 100 1N100
  • 1 ≤ w o r d [ i ] . l e n g t h , c h a r s . l e n g t h ≤ 100 1 \le word[i].length, chars.length \le 100 1word[i].length,chars.length100

题解

这道题可以通过统计字符频率的方式来判断是否能拼写出每个单词。

  1. 首先统计 c h a r s chars chars 中每个字母出现的次数,以及 ? 出现的次数。
  2. 对于每个单词 w o r d word word,统计其中每个字母出现的次数。
  3. 遍历单词的每个字母,如果该字母在 c h a r s chars chars 中出现的次数大于等于在 w o r d word word 中出现的次数,则可以拼写;否则,如果 ? 的数量大于等于不足的字母数,也可以拼写;否则,无法拼写该单词。
  4. 如果能拼写该单词,则答案加一。
  5. 最后输出答案即可。

时间复杂度为 O ( N L ) O(NL) O(NL),其中 N N N 为单词数量, L L L 为单词的平均长度。空间复杂度为 O ( 1 ) O(1) O(1),因为只需要常数级的额外空间。

参考代码

  • Python
n = int(input())
words = []
for _ in range(n):
    words.append(input())
chars = input()

def can_spell(word, chars):
    cnt_word = [0] * 26
    for c in word:
        cnt_word[ord(c) - ord('a')] += 1
    
    cnt_chars = [0] * 26
    wild = 0
    for c in chars:
        if c == '?':
            wild += 1
        else:
            cnt_chars[ord(c) - ord('a')] += 1
    
    for i in range(26):
        if cnt_word[i] > cnt_chars[i]:
            if wild >= cnt_word[i] - cnt_chars[i]:
                wild -= cnt_word[i] - cnt_chars[i]
            else:
                return False
    
    return True

ans = 0
for word in words:
    if can_spell(word, chars):
        ans += 1

print(ans)
  • Java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String[] words = new String[n];
        for (int i = 0; i < n; i++) {
            words[i] = sc.next();
        }
        String chars = sc.next();
        
        int ans = 0;
        for (String word : words) {
            if (canSpell(word, chars)) {
                ans++;
            }
        }
        
        System.out.println(ans);
    }
    
    private static boolean canSpell(String word, String chars) {
        int[] cntWord = new int[26];
        for (char c : word.toCharArray()) {
            cntWord[c - 'a']++;
        }
        
        int[] cntChars = new int[26];
        int wild = 0;
        for (char c : chars.toCharArray()) {
            if (c == '?') {
                wild++;
            } else {
                cntChars[c - 'a']++;
            }
        }
        
        for (int i = 0; i < 26; i++) {
            if (cntWord[i] > cntChars[i]) {
                if (wild >= cntWord[i] - cntChars[i]) {
                    wild -= cntWord[i] - cntChars[i];
                } else {
                    return false;
                }
            }
        }
        
        return true;
    }
}
  • Cpp
#include <iostream>
#include <vector>
#include <string>
using namespace std;

bool canSpell(string word, string chars) {
    vector<int> cntWord(26, 0);
    for (char c : word) {
        cntWord[c - 'a']++;
    }
    
    vector<int> cntChars(26, 0);
    int wild = 0;
    for (char c : chars) {
        if (c == '?') {
            wild++;
        } else {
            cntChars[c - 'a']++;
        }
    }
    
    for (int i = 0; i < 26; i++) {
        if (cntWord[i] > cntChars[i]) {
            if (wild >= cntWord[i] - cntChars[i]) {
                wild -= cntWord[i] - cntChars[i];
            } else {
                return false;
            }
        }
    }
    
    return true;
}

int main() {
    int n;
    cin >> n;
    vector<string> words(n);
    for (int i = 0; i < n; i++) {
        cin >> words[i];
    }
    string chars;
    cin >> chars;
    
    int ans = 0;
    for (string word : words) {
        if (canSpell(word, chars)) {
            ans++;
        }
    }
    
    cout << ans << endl;
    
    return 0;
}

🍓OJ题目截图

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JAVA系列:NIO

NIO学习 一、前言 先来看一下NIO的工作流程图&#xff1a; NIO三大核心组件&#xff0c;channel&#xff08;通道&#xff09;、Buffer&#xff08;缓冲区&#xff09;、selector&#xff08;选择器&#xff09;。NIO利用的是多路复用模型&#xff0c;一个线程处理多个IO的读…

掌控未来,爱普生SR3225SAA用于汽车钥匙、射频电路的智慧引擎

为了响应市场需求&#xff0c;Epson使用独家QMEMS*2技术所生产的石英振荡器&#xff0c;与其精巧的半导体技术所制造的射频传输器电路&#xff0c;开发了SR3225SAA。不仅内建的石英震荡器之频率误差仅有2 ppm&#xff0c;更使其封装尺寸达仅3.2 mm x 2.5 mm&#xff0c;为客户大…

Owinps静态IP代理:跨境电商的优选解决方案

在快速发展的电子商务领域&#xff0c;尤其是跨境电商行业&#xff0c;网络的稳定性和安全性是成功经营的关键因素之一。在这背后&#xff0c;少不得一个重要的跨境电商工具——代理IP&#xff0c;而这其中&#xff0c;静态IP因其独特的稳定性和安全性&#xff0c;正逐渐成为众…

git 学习(一)

一、版本控制 &#xff08;一&#xff09;介绍 版本迭代 每一次更新代码 都会出现新的版本如果我们需要之前的版本的文件 我们就得需要版本控制的文件 每一次更新的结果我们都保存下来 多人开发必须要用版本控制器 否则代价会很大 &#xff08;二&#xff09;主流的版本控制…

7款令人惊艳的UI界面设计模板分享

UI界面设计始终围绕用户展开&#xff0c;终极产品界面设计中的用户体验功能必须细致。对于UI设计师来说&#xff0c;欣赏优秀的UI界面设计模板不仅能给我们带来源源不断的灵感&#xff0c;还能激发我们对谁的思考和感悟。为了激发设计师的设计思维和灵感&#xff0c;本文将介绍…

网络编程基础(四)

目录 前言 二、多点通信 2.1 单播 2.2 广播 2.2.1 广播得发送端实现--》类似与UDP的客户端 2.3 组播 2.3.1 组播发送端流程--》类似于UDP的客户端流程 2.3.2 组播的接收端流程---》类似于UDP的服务器端流程 前言 多点通信 一、套接字选项得获取和设置 int getsockopt(int…

制作Dcoker镜像

文章目录 一、Docker构建镜像的原理1、镜像分层原理2、Docker的镜像结构3、分层存储原理4、构建命令与层的关系5、最终镜像的创建 二、docker commit 构建镜像1、使用场景2、手动制作yum版的nginx镜像2.1、启动一个centos容器&#xff0c;安装好常用的软件以及nginx2.2、关闭ng…

如何利用Firebase Hosting来托管网站

文章目录 如何利用Firebase Hosting来托管网站前提条件详细步骤1. 安装 Firebase CLI2. 登录 Firebase3. 初始化 Firebase 项目4. 准备网站文件5. 部署到 Firebase6. 配置自定义域名&#xff08;可选&#xff09; 常见问题 如何利用Firebase Hosting来托管网站 以下是更详细的…

硬盘的分区的类型及创建分区的步骤及交换分区、永久挂载的方法

业务层面&#xff1a;为了满足一定的需求所做的特定操作。 硬盘是什么&#xff0c;以及硬盘的作用。 硬盘&#xff1a;计算机的存储设备&#xff0c;一个或者多个带磁性的盘组成&#xff0c;可以在盘片上进行数据的读写 连接方式&#xff1a;内部设备 外部设备&#xff08;移…

linux /www/server/cron内log文件占用空间过大,/www/server/cron是什么内容,/www/server/cron是否可以删除

linux服务器长期使用宝塔自带计划任务&#xff0c;计划任务执行记录占用服务器空间过大&#xff0c;导致服务器根目录爆满&#xff0c;需要长期排查并删除 /www/server/cron 占用空间过大问题处理 /www/server/cron是什么内容&#xff1f;/www/server/cron是否可以删除&#xf…

低代码开发与人工智能技术在商品推荐系统中的应用

引言 低代码开发和人工智能技术的背景和重要性 随着数字化转型的深入&#xff0c;企业在信息技术领域面临着前所未有的挑战和机遇。快速变化的市场需求、日益复杂的技术环境以及高度竞争的商业环境&#xff0c;迫使企业不断寻求高效的开发和运营解决方案。低代码开发平台应运而…

【设计模式】JAVA Design Patterns——Dependency Injection(依赖注入模式)

&#x1f50d;目的 依赖注入是一种软件设计模式&#xff0c;其中一个或多个依赖项&#xff08;或服务&#xff09;被注入或通过引用传递到一个依赖对象&#xff08;或客户端&#xff09;中&#xff0c;并成为客户端状态的一部分。该模式将客户的依赖关系的创建与其自身的行为分…

3.Spring Cloud LoadBalancer 入门与使用

3.Spring Cloud LoadBalancer 入门与使用 1.什么是 LoadBalancer?1.1负载均衡分类1.2 常见负载均衡策略 2.为什么要学 LoadBalancer?3.如何使用?4.默认负载均衡策略5.随机负载均策略5.1 创建随机负载均衡器5.2 设置随机负载均衡器 (局部设置)5.3 设置全局负载均衡器 6.Nacos…

Codeforces Round 946 (Div. 3) A~G

A.Phone Desktop (枚举) 题意&#xff1a; 小 A A A的手机有一个桌面&#xff08;或称启动器&#xff09;。桌面可以由多个屏幕组成。每个屏幕表示为大小为 5 3 5 \times 3 53 的网格&#xff0c;即五行三列。 有 x x x 个应用程序的图标大小为 1 1 1 \times 1 11 个单…

C51单片机开发--库函数

知不足而奋进 望远山而前行 目录 系列文章目录 文章目录 前言 目标 内容 开发过程回顾 使用库函数点灯 什么是库函数? 面向库函数和面向寄存器开发 使用delay模块延时 总结 前言 在嵌入式系统开发中&#xff0c;使用库函数是提高开发效率、简化编程的重要手段之一…

学习Uni-app开发小程序Day21

学习了评分组件、自定义导航栏 评分组件uni-rate 这是需要达到的效果图&#xff0c;这里先分析下效果图&#xff0c; 1、图片是从布局中间弹出的&#xff0c;那这里就要用到uni-popup &#xff0c;设置type从中间弹出 2、这个弹出的顶部和上一张的顶部布局是一样的&#xff0c…

Axios的使用简单说明

axios 请求方式和参数 axios 可以发送 ajax 请求&#xff0c;不同的方法可以发送不同的请求: axios.get&#xff1a;发送get请求 axios.post&#xff1a;发送post请求 axios.put&#xff1a;发送put请求 axios.delete&#xff1a;发送delete请求 无论哪种方法&#xff0c;第一…

怎么使用Stable diffusion中的models

Stable diffusion中的models Stable diffusion model也可以叫做checkpoint model&#xff0c;是预先训练好的Stable diffusion权重&#xff0c;用于生成特定风格的图像。模型生成的图像类型取决于训练图像。 如果训练数据中从未出现过猫的图像&#xff0c;模型就无法生成猫的…

应急响应-网页篡改-典型处置案例

内部系统主页被篡改 事件背景 2019年11月13日&#xff0c;某单位发现其内部系统的主页被篡改&#xff0c;应急响应工程师到达现场后对被入侵服务器进行检查&#xff0c;发现对方采用某开源CMS和第三方phpstudy进行环境部署。由于phpstudy默认不开启Web日志记录&#xff0c;因…

【Pandas】深入解析`pd.read_json()`函数

【Pandas】深入解析pd.read_json()函数 &#x1f308; 欢迎莅临我的个人主页&#x1f448;这里是我深耕Python编程、机器学习和自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;并乐于分享知识与经验的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#x…