【2023C卷最新题目】20天拿下华为OD笔试之【哈希表】2023C-掌握单词个数-全网注释最详细分类最全的华为OD真题题解

文章目录

  • 题目描述与示例
    • 题目描述
      • 输入描述
      • 输入描述
    • 示例一
      • 输入
      • 输出
      • 说明
    • 示例二
      • 输入
      • 输出
      • 说明
  • 解题思路
  • 代码
    • Python
    • Java
    • C++
    • 时空复杂度
  • 华为OD算法/大厂面试高频题算法练习冲刺训练

题目描述与示例

题目描述

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

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

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

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

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

输入描述

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

输入描述

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

示例一

输入

4
cat
bt
hat
tree
atach

输出

2

说明

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

示例二

输入

4
cat
bt
hat
tree
at?ch

输出

3

说明

at?ch可以拼写出单词cathatbt,因此掌握的单词是3个。

解题思路

统计元素频率,很显然需要使用哈希表进行。

唯一需要特殊处理的就是字符?可以代表万能字符。

假设某一单词word和字符串chars对应的计数器分别为cnt_wordcnt_chars,问号字符?出现的次数为num。那么在逐一比较word中字符出现次数和chars中元素出现字符时,若出现cnt_word[k] > cnt_chars[k],则可以使用cnt_word[k] - cnt_chars[k]?来作为万能字符。若发现此时?出现的次数为num已经小于cnt_word[k] - cnt_chars[k],则无法拼凑出单词word

代码

Python

# 题目:【哈希表】2023C-掌握单词个数
# 分值:100
# 作者:许老师-闭着眼睛学数理化
# 算法:哈希表
# 代码看不懂的地方,请直接在群上提问# 检查cnt_chars能否完全拼写出cnt_word的函数
# 其中num为cnt_chars中问号字符的个数
def check(cnt_chars, cnt_word, num):# 遍历cnt_word中的所有键kfor k in cnt_word.keys():# 如果chars中k出现的个数大于等于word# 则可以直接使用这些字符k来拼写出word中的kif cnt_chars[k] >= cnt_word[k]:continue# 如果chars中k出现的个数小于wordelse:# 则需要使用cnt_word[k] - cnt_chars[k]个万能字符# 才能使得字符k能够被在chars中被全部拼写num -= cnt_word[k] - cnt_chars[k]# 若使用完之后,num的个数小于0,则说明万能字符的个数不足# 不可能完成拼写# 直接返回Falseif num < 0:return False# 如果能够顺利退出上述循环,即通过了检查,返回Truereturn Truefrom collections import Counter# 输入words的个数
n = int(input())
words = list()
# 循环n次,输入n个单词
for _ in range(n):words.append(input())# 输入chars字符串
chars = input()# 获得chars字符串对应的元素频率哈希表
cnt_chars = Counter(chars)ans = 0
# 获得chars中问号字符的个数
num = cnt_chars["?"]# 遍历words中的每一个单词word
for word in words:# 构建word对应的哈希表计数器cnt_word = Counter(word)# 调用check函数,将结果加入ans中ans += int(check(cnt_chars, cnt_word, num))print(ans)

Java

import java.util.*;public class Main {static boolean check(HashMap<Character, Integer> cntChars, HashMap<Character, Integer> cntWord, int num) {for (char k : cntWord.keySet()) {if (cntChars.getOrDefault(k, 0) >= cntWord.getOrDefault(k, 0)) {continue;} else {num -= cntWord.getOrDefault(k, 0) - cntChars.getOrDefault(k, 0);if (num < 0) {return false;}}}return true;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = Integer.parseInt(scanner.nextLine());List<String> words = new ArrayList<>();for (int i = 0; i < n; i++) {words.add(scanner.nextLine());}String chars = scanner.nextLine();HashMap<Character, Integer> cntChars = new HashMap<>();for (char c : chars.toCharArray()) {cntChars.put(c, cntChars.getOrDefault(c, 0) + 1);}int ans = 0;int num = cntChars.getOrDefault('?', 0);for (String word : words) {HashMap<Character, Integer> cntWord = new HashMap<>();for (char c : word.toCharArray()) {cntWord.put(c, cntWord.getOrDefault(c, 0) + 1);}ans += check(cntChars, cntWord, num) ? 1 : 0;}System.out.println(ans);}
}

C++

#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;bool check(unordered_map<char, int>& cntChars, unordered_map<char, int>& cntWord, int num) {for (auto& kv : cntWord) {char k = kv.first;if (cntChars[k] >= cntWord[k]) {continue;} else {num -= cntWord[k] - cntChars[k];if (num < 0) {return false;}}}return true;
}int main() {int n;cin >> n;cin.ignore(); // To consume the newline charactervector<string> words(n);for (int i = 0; i < n; ++i) {cin >> words[i];}cin.ignore(); // To consume the newline characterstring chars;getline(cin, chars);unordered_map<char, int> cntChars;for (char c : chars) {cntChars[c]++;}int ans = 0;int num = cntChars['?'];for (string& word : words) {unordered_map<char, int> cntWord;for (char c : word) {cntWord[c]++;}ans += check(cntChars, cntWord, num) ? 1 : 0;}cout << ans << endl;return 0;
}

时空复杂度

时间复杂度:O(NM)。其中M为每一个单词word的字符种类个数,最高为26。单次调用check()函数的时间复杂度为O(M)

空间复杂度:O(N)


华为OD算法/大厂面试高频题算法练习冲刺训练

  • 华为OD算法/大厂面试高频题算法冲刺训练目前开始常态化报名!目前已服务100+同学成功上岸!

  • 课程讲师为全网50w+粉丝编程博主@吴师兄学算法 以及小红书头部编程博主@闭着眼睛学数理化

  • 每期人数维持在20人内,保证能够最大限度地满足到每一个同学的需求,达到和1v1同样的学习效果!

  • 60+天陪伴式学习,40+直播课时,300+动画图解视频,300+LeetCode经典题,200+华为OD真题/大厂真题,还有简历修改、模拟面试、专属HR对接将为你解锁

  • 可上全网独家的欧弟OJ系统练习华子OD、大厂真题

  • 可查看链接 大厂真题汇总 & OD真题汇总(持续更新)

  • 绿色聊天软件戳 od1336了解更多

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

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

相关文章

AIGC 点亮创作之旅,「重内容」行业也能轻装出发

毋庸置疑&#xff0c;AIGC 的普及成为了内容产业的一束光。 不仅策划们可以从信息挖掘、素材调用、修改编辑等基础文案工作中解放出来&#xff0c;美术也成为 AIGC 的应用强项&#xff0c;基本的加文字、换背景、改尺寸、延展素材等&#xff0c;都能快速解决。 内容创作者们也因…

leetcode:1773. 统计匹配检索规则的物品数量(python3解法)

难度&#xff1a;简单 给你一个数组 items &#xff0c;其中 items[i] [typei, colori, namei] &#xff0c;描述第 i 件物品的类型、颜色以及名称。 另给你一条由两个字符串 ruleKey 和 ruleValue 表示的检索规则。 如果第 i 件物品能满足下述条件之一&#xff0c;则认为该物…

使用内网穿透工具实现远程访问本地部署的Odoo企业管理系统

文章目录 前言1. 下载安装Odoo&#xff1a;2. 实现公网访问Odoo本地系统&#xff1a;3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件&#xff0c;是一个一站式全功能ERP及电商平台。 开源性质&#xff1a;Odoo是一个开源的ERP软件&#xff0c;这意味着企…

阿里云学生认证可领300元无门槛代金券(高效计划)

阿里云高校计划学生和教师均可参与&#xff0c;完成学生认证和教师验证后学生可以免费领取300元无门槛代金券和3折优惠折扣&#xff0c;适用于云服务器等全量公共云产品&#xff0c;订单原价金额封顶5000元/年&#xff0c;阿里云百科aliyunbaike.com分享阿里云高校计划入口及学…

下载安装升讯威在线客服系统时提示风险的解决办法

客服系统的服务端程序、客服端程序、配套的配置工具涉及磁盘文件读写、端口监听&#xff0c;特别是经过混淆加密后&#xff0c;可能被部分浏览器或部分杀毒软件提示风险。请忽略并放心使用&#xff0c;如果开发软件是为了植入木马&#xff0c;这个代价可太大了&#xff0c;不如…

危险了:蓝牙协议爆严重安全漏洞!

导读据外媒报道&#xff0c;美国的物联网安全研究公司Armis在蓝牙协议中发现了8个零日漏洞&#xff0c;而这些漏洞将会影响全球超过53亿的设备&#xff0c;包括Android、iOS、Windows、Linux系统设备以及使用短距离无线通信技术的物联网设备。 Armis的研究人员利用这些漏洞构建…

360反馈可以改变行为吗?

许多组织将 360反馈作为其绩效或人员发展议程的一部分&#xff0c;其最终目标是改变个人或团体的行为。但 360 度反馈能有效实现这一目标吗&#xff1f;有哪些证据表明 360 度反馈可以真正改变工作场所的行为和技能&#xff1f;当你谈论 360 度反馈时&#xff0c;”有效 “意味…

二进制插桩:静态插桩和动态intel pin插桩

目前有两类插桩平台&#xff1a;静态插桩&#xff08;SBI&#xff09;和动态插桩&#xff08;DBI&#xff09; SBI使用二进制重写方法永久修改磁盘上的二进制文件&#xff1b;DBI不会修改磁盘上的二进制程序&#xff0c;而是监视二进制程序的执行状态&#xff0c;并在其运行时…

C语言杨辉三角(ZZULIOJ1130:杨辉三角)

题目描述 还记得中学时候学过的杨辉三角吗&#xff1f;具体的定义这里不再描述&#xff0c;你可以参考以下的图形&#xff1a;1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 输入&#xff1a;输入只包含一个正整数n&#xff08;1 < n < 30&#xff09;&#xff0c;表示将…

python:关于函数内 * 和 / 是什么意思?

总结&#xff1a;如果你希望调用者使用函数时一定不能使用关键字传参&#xff0c;要求它使用位置进行传参&#xff0c;那么就可以把这些参数放在 / 的前面即可&#xff1b;如果你希望调用者使用函数时一定要使用某些参数&#xff0c;且必须是关键字传参时&#xff0c;那么就可以…

基于PHP的动漫周边购物系统

有需要请加文章底部Q哦 可远程调试 基于PHP的动漫周边购物系统 一 介绍 此动漫周边购物系统系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。用户可注册登录&#xff0c;购物下单&#xff0c;评论等。管理员登录后台可对动漫周边商品&#xff0c;用户…

跨越行业边界,CodeMeter护航AI领域安全与合规

在人工智能&#xff08;AI&#xff09;技术如ChatGPT的推动下&#xff0c;工业视觉、医疗诊断和智能驾驶等领域正在经历重大变革。这些技术不仅扩大了应用范围&#xff0c;也带来了数据安全、软件授权保护和合规性等新挑战。 AI工业视觉正在推动制造和自动化的快速发展&#x…

腾讯云服务器99元一年,续费多少钱?

腾讯云服务器99元一年&#xff0c;续费多少钱&#xff1f;腾讯云服务器价格是88元一年起&#xff0c;不是99元&#xff0c;阿里云是99元一年&#xff0c;续费不涨价依旧是99元的价格续费。腾讯云88元服务器配置为2核2G3M带宽的轻量应用服务器&#xff0c;续费价格不是88元&…

如何提⾼webpack的打包速度?

要提高Webpack的打包速度,可以尝试以下几种方法: 1:使用最新版本的Webpack: 确保使用的是最新版本的Webpack,因为每个版本都会带来性能改进和优化。 2:优化Webpack的配置: 检查Webpack配置文件,确保使用了合适的配置选项。例如,使用production模式配置可以开启一些优…

matlab-实现-BP-神经网络

最近写论文用到了很多神经网络和优化算法&#xff0c;算是废了不少精力收集起来的&#xff0c;还是整理出来分享给大家&#xff0c;以免浪费了。 本篇以最简单的 BP神经网络开始吧 详细的实现步骤如下&#xff1a; 1.环境准备&#xff1a;清空环境变量、关闭开启的图窗、清空变…

【腾讯云云上实验室-向量数据库】腾讯云VectorDB:深度学习场景下的新一代数据存储方案

引言 ​  在深度学习领域的实践中&#xff0c;一般会涉及到向量化处理的数据&#xff0c;如图像、文本、音频等&#xff0c;这些数据的存储和检索对于许多深度学习任务至关重要。传统的关系型数据库和NoSQL数据库在存储和检索这类大规模向量数据时&#xff0c;通常不能满足高…

学习计划计划执行记录

11.21--写下学习目标 游戏行业通识学习&#xff1a; 求知鱼游戏学院的个人空间-求知鱼游戏学院个人主页-哔哩哔哩视频 (bilibili.com) (28 封私信 / 80 条消息) 游鲨游戏圈 - 知乎 (zhihu.com) 书籍学习&#xff1a; 软技能2&#xff1a;软件开发者职业生涯指南 面经学习…

Redis 与其他数据库的不同之处 | Navicat

Redis&#xff0c;即远程字典服务器&#xff08;Remote Dictionary Server&#xff09;&#xff0c;它是一个多功能且高性能的键值存储系统&#xff0c;在数据库领域中已获得广泛关注和认可。在处理简单数据结构方面&#xff0c;它因其快速和高效而著称。本文中&#xff0c;我们…

[媒体]js上传视频图片格式对应的原生type判断

视频格式&#xff1a; wmv: video/x-ms-wmvrm: application/vnd.rn-realmediamov: video/quicktimempeg: video/mpegmp4: video/mp43gp: video/3gppflv: video/x-flvavi: video/x-msvideormvb: application/vnd.rn-realmedia-vbrts: video/mp2tasf: video/x-ms-asfmpg: video/…

electron入门(一)环境搭建,实现样例

1、首先需要安装git和node&#xff0c;配置环境变量&#xff0c;确保npm和git命令可用 2、 然后安装依赖 npm install -g electronnpm install -g electron-forgenpm install -g electron-prebuilt-compile3、 创建样例工程 electron-forge init my-new-app # 我这里碰见报错…