2023华为od机试C卷【掌握单词的个数】Python

news2024/12/26 11:46:46

2023华为od机试C卷【掌握单词的个数】

在这里插入图片描述
在这里插入图片描述

问题分析

  1. 输入内容

    • 具体的单词数量和单词列表。
    • 一个包含字母和 ? 的字符串,该字符串表示可以用来构词的字符。
  2. 目标

    • 计算哪些单词可以由给定字符以及 ?(作为通配符)构成。

解题思路

  1. 字符统计

    • 使用一个数组统计允许构成的字符(字母 a-z)的数量。
    • 统计 ? 的数量,作为可以灵活使用的字符。
  2. 每个单词验证

    • 对于每个单词,统计它的字母的数量。
    • 逐个比较该单词所需的字母数量与允许使用的字符数量。
      • 如果单词中某个字母的需求超过了可用字符,则计算缺口,并检查是否可以用 ? 来弥补这些缺口。
  3. 计数合法单词

    • 如果一个单词可以由给定字符及适量的 ? 构成,则将其计入可构成的单词总数。
  4. 输出结果

    • 最后输出可以被构成的单词数量。

实现步骤

  1. 读取输入数据
  2. 统计可用字符和 ? 的数量
  3. 遍历每个单词并验证是否可以构成
    • 使用临时计数器来处理 ? 的数量。
  4. 输出满足条件的单词数量

复杂度分析

  • 这个方法的时间复杂度主要取决于单词的数量以及每个单词的长度,整体复杂度为 (O(n \times m)),其中 (n) 是单词的数量,(m) 是单词的平均长度。由于字符集限制在低容量(只针对 a-z),因此字符计数部分的操作是常数时间的。

这样的思路清晰地将问题分解为多个步骤,有助于系统地解决问题并保证实现的简洁和高效。

def main():  #这是程序的入口点,负责读取输入、处理数据并输出结果。
    n = int(input())  #读取单词数量:首先读取一个整数 n,表示接下来将输入的单词的数量
    words = [input().strip() for _ in range(n)] #读取单词:使用列表推导式读取 n 个单词。input().strip() 确保去掉每个单词前后的空格。
    chars = input().strip()  #读取一行字符串 chars,这其中可能包含字母和特殊字符 ?。

    # Create a count map for the characters  
    char_count_map = [0] * 26  
    magic_char_count = 0  
# 初始化字符计数器:创建一个大小为 26 的列表 char_count_map 
# 用于统计每个字母出现的次数(对应于字母 a-z)。同时初始化一个变量 magic_char_count 用于统计 ? 字符的数量。

    for char in chars:  
        if char == '?':  
            magic_char_count += 1  
        else:  
            char_count_map[ord(char) - ord('a')] += 1  
# 统计字符:遍历 chars 中的每个字符。如果是 ?,则增加 magic_char_count;
# 否则,通过 ord 函数将字符转为对应的索引并更新 char_count_map 中的计数。

    output_count = 0  
#初始化输出计数:准备一个变量 output_count 用于记录可以用已给字符构成的合法单词的数量。

    for word in words:  #遍历每个单词:对于每一个输入的单词,接下来的计数和验证过程。
        # Create a count map for the current word  
        word_count_map = [0] * 26  
        for char in word:  
            word_count_map[ord(char) - ord('a')] += 1  
        #统计单词字符:同样的,创建一个 word_count_map 来记录当前单词中每个字母的出现次数。

        # Check if the word can be formed using the char_count_map and magic characters  
        flag = True  
        temp_count = magic_char_count  
        
        #初始化标记及临时计数器:设置一个布尔变量 flag,用于判断当前单词是否可以被构成,
        #temp_count 初始化为 magic_char_count,用于在后续计算中追踪可以使用的魔法字符(即 ? 的数量)。
        
        for k in range(26):  
            if word_count_map[k] > char_count_map[k]:  
                temp_count -= (word_count_map[k] - char_count_map[k])  
                if temp_count < 0:  
                    flag = False  
                    break  
        #验证单词构成:遍历每个字母(从 a 到 z)。如果当前单词中某个字母的需求量超过了可用字符的数量,
        #则计算需要的大于之数,并从 temp_count 中减去。如果 temp_count 别减到负数,说明无法匹配该单词,
        #设置 flag 为 False 并跳出循环。

        if flag:  
            output_count += 1  
        #记录合法单词:如果 flag 为 True,说明当前单词可以由给定的字符及魔法字符构成,则将 output_count 增加 1。

    print(output_count)  

if __name__ == "__main__":  
    main()

该真题和力扣拼写单词有点类似
在这里插入图片描述
在这里插入图片描述

class Solution:
    def countCharacters(self, words: List[str], chars: str) -> int:
        ans = 0
        cnt = collections.Counter(chars)
        for w in words:
            c = collections.Counter(w)
            if all([c[i] <= cnt[i] for i in c]):
                ans += len(w)
        return ans

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

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

相关文章

政安晨:【Keras机器学习示例演绎】(五十七)—— 基于Transformer的推荐系统

目录 介绍 数据集 设置 准备数据 将电影评分数据转换为序列 定义元数据 创建用于训练和评估的 tf.data.Dataset 创建模型输入 输入特征编码 创建 BST 模型 开展培训和评估实验 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 希望政安晨的…

Python 中的 “私有”(实现)类

在 Python 中&#xff0c;尽管没有严格意义上的私有类&#xff08;private class&#xff09;&#xff0c;但可以通过命名约定和语言特性来模拟实现类似的访问控制。Python 的私有类的概念通常是通过以下几种方式来实现&#xff1a; 1、问题背景 我正在编码一个由两部分组成的…

数值分析——分段低次插值

关键字&#xff1a;Matalb&#xff1b;曲线拟合&#xff1b;高次病态特性&#xff1b;分段低次插值 系列文章目录 数值分析——拉格朗日插值 数值分析——牛顿插值多项式 数值分析——埃尔米特&#xff08;Hermit&#xff09;插值 文章目录 系列文章目录前言一、理论推导1.高次…

Python面试宝典第25题:括号生成

题目 数字n代表生成括号的对数&#xff0c;请设计一个函数&#xff0c;用于能够生成所有可能的并且有效的括号组合。 备注&#xff1a;1 < n < 8。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;["((()))","(()())","(())()"…

泛化的最近点迭代法(Generalized-ICP)

Generalized-ICP算法是由斯坦福大学的Aleksandr V. Segal、Dirk Haehnel和Sebastian Thrun提出的&#xff0c;于2009年在Robotics science and system会议上发表。 GICP是一种ICP算法的变体&#xff0c;其原理与ICP算法相同&#xff0c;之所以称为泛化的ICP算法是因为大多数ICP…

MongoDB性能调优

文章目录 MongoDB性能调优MongoDB性能不佳原因影响MongoDB性能的因素MongoDB性能监控工具mongostatmongotopProfiler模块db.currentOp() MongoDB性能调优 MongoDB性能不佳原因 慢查询阻塞等待硬件资源不足 1,2通常是因为模型/索引设计不佳导致的 排查思路&#xff1a;按1-2…

再论国产数据库的选择

如何选择国产数据库? 上篇写得很水,本来不想继续写了! 毕竟写一篇很费心力,大家觉得好,就点下广告支持下吧! 因为今天看到类总的朋友圈,发个公号文章.里面讲个故事, 数据最前线 关注数据生态&#xff0c;讲述开源故事 13篇原创内容 公众号 某国产数据库救援现场惊魂8小时…

Golang | Leetcode Golang题解之第313题超级丑数

题目&#xff1a; 题解&#xff1a; func nthSuperUglyNumber(n int, primes []int) int {dp : make([]int, n1)m : len(primes)pointers : make([]int, m)nums : make([]int, m)for i : range nums {nums[i] 1}for i : 1; i < n; i {minNum : math.MaxInt64for j : range…

【大模型框架】【推理加速】KV CACHE

1. 思想 核心思想是空间换时间来进行加速 2. 基本原理 transformer是自回归生成模型&#xff0c;abc三个字符预测def 过程是: abc -> d d进行回归得到abc,回归讲究的是回去&#xff0c;如香港回归 abcd -> e 这里abc的运算中间值Q V可以保存下来作为Cache&#xf…

爬猫眼电ying

免责声明:本文仅做分享... 未优化,dp简单实现 from DrissionPage import ChromiumPage import time urlhttps://www.maoyan.com/films?showType2&offset60 pageChromiumPage()page.get(url) time.sleep(2) for i in range(1,20):# 爬取的页数for iu_list in page.eles(.…

c语言指针中“数组名的理解”以及“一维数组传参”的本质

数组名的理解 数组名就是数组首元素的地址。 例如&#xff1a;输入一个数组的所有元素&#xff0c;再打印出来。 另一种写法 以上可以看出&#xff1a;*arri&#xff09; arr[i] 也即是&#xff1a;*(iarr)i[arr] 本质上无区别 1&#xff1a;数组就是数组&#xff0c;是一块…

List 31

ArrayList底层原理 Linkedlist的底层原理 使用场景

扎克伯格说Meta训练Llama 4所需的计算能力是Llama 3的10倍

Meta 公司开发了最大的基础开源大型语言模型之一 Llama&#xff0c;该公司认为未来将需要更强的计算能力来训练模型。马克-扎克伯格&#xff08;Mark Zuckerberg&#xff09;在本周二的 Meta 第二季度财报电话会议上表示&#xff0c;为了训练 Llama 4&#xff0c;公司需要比训练…

做管理,一定要避开这6个坑,才能成就优秀管理者

做管理&#xff0c;一定要避开这6个坑&#xff0c;才能成就优秀管理者 一、被平庸的员工绑架 要是领导不敢或者不愿意惩罚或者开除那些没完成任务的员工&#xff0c;那优秀的员工就会觉得&#xff0c;做得好做得差都一样&#xff0c;那谁还愿意努力呢&#xff1f; 二、总想改变…

【Mind+】掌控板入门教程01 “秀”出我创意

我们的好朋友麦乐佳即将举办一场派对&#xff0c;她要求每个参加派对的人都要佩戴一个可以彰显自己独特创意的装置。可以是会发光的帽子&#xff0c;可以是复古的电子表&#xff0c;还可以是其他有创意的作品。而现在&#xff0c;我们的手边刚好有一块掌控板&#xff0c;它自带…

汇聚数字智慧 构建新质未来——《CMG数字中国》融媒体节目正式上线

7月25日&#xff0c;由中央广播电视总台上海总站、央视频和数创未来&#xff08;上海&#xff09;传媒科技有限公司联合打造的《CMG数字中国》融媒体节目正式上线。 中国共产党第二十届中央委员会第三次全体会议提出&#xff0c;高质量发展是全面建设社会主义现代化国家的首要…

8.Redis的List类型

Redis中的list跟java中的LinkedList比较相似&#xff0c;可以看做是一个双向链表的结构。 既可以支持正向检索和反向检索。 特点 1.有序 2.元素可以重复 3.插入和删除快 4.查询速度一般 应用场景 点赞和评论功能&#xff0c;都会存在一个顺序&#xff0c;谁先评论&…

AI Agent学习系列:扣子智能体手把手入门教程

AI智能体为什么现在这么火&#xff1f;我个人认为有以下几点原因&#xff1a; 智能体基于大模型而又强于大模型&#xff08;垂直领域&#xff09; 智能体基于零代码或者低代码模式&#xff0c;不需要编程基础&#xff0c;对于非程序员非常友好&#xff0c;使得大多数人都能成…

CoderGuide

CoderGuide是一个针对同学们前后端求职面试的开源项目&#xff0c;作为一名互联网/IT从业人员&#xff0c;经常需要搜索一些书籍、面试题等资源&#xff0c;在这个过程中踩过很多坑、浪费过很多时间。欢迎大家 Watch、Star&#xff0c;供各位同学免费使用&#xff0c;永不收费&…

【Python】pandas:替换值、添加行/列,删除行/列,更改形状(含数据透视表)

pandas是Python的扩展库&#xff08;第三方库&#xff09;&#xff0c;为Python编程语言提供 高性能、易于使用的数据结构和数据分析工具。 pandas官方文档&#xff1a;User Guide — pandas 2.2.2 documentation (pydata.org) 帮助&#xff1a;可使用help(...)查看函数说明文…