【华为OD-E卷-寻找关键钥匙 100分(python、java、c++、js、c)】
【华为OD-E卷-寻找关键钥匙 100分(python、java、c++、js、c)】
题目
小强正在参加《密室逃生》游戏,当前关卡要求找到符合给定 密码K(升序的不重复小写字母组成) 的箱子,并给出箱子编号,箱子编号为 1~N 。
每个箱子中都有一个 字符串s ,字符串由大写字母、小写字母、数字、标点符号、空格组成,需要在这些字符串中找到所有的字母,忽略大小写后排列出对应的密码串,并返回匹配密码的箱子序号。
提示:满足条件的箱子不超过1个。
输入描述
- 第一行为 key 的字符串,
第二行为箱子 boxes,为数组样式,以空格分隔
箱子 N 数量满足 1 ≤ N ≤ 10000, s 长度满足 0 ≤ s.length ≤ 50, 密码为仅包含小写字母的升序字符串,且不存在重复字母, 密码 K 长度1 ≤ K.length ≤ 26
输出描述
- 返回对应箱子编号
如不存在符合要求的密码箱,则返回 -1。
备注
- 箱子中字符拼出的字符串与密码的匹配忽略大小写,且要求与密码完全匹配,如密码abc匹配aBc,但是密码abc不匹配abcd
用例
用例一:
输入:
abc
s,sdf134 A2c4b
输出:
2
用例二:
输入:
abc
s,sdf134 A2c4bd 523[]
输出:
1
python解法
- 解题思路:
- 这段代码的目标是从一组字符串(boxes)中找到第一个可以和输入的 key 匹配的箱子(匹配条件是两个字符串的字符可以完全重排成彼此,忽略大小写和非字母字符)。匹配时返回箱子的索引(从 1 开始),如果找不到匹配则返回 -1。
具体匹配条件:
对 key 按字母排序。
对每个箱子,过滤出其中的字母字符,转换为小写后排序。
比较 key 的排序结果和当前箱子过滤后排序的结果是否相同
# 读取输入 key 和 boxes 列表
key = input() # 匹配的关键字符串
boxes = input().split() # 多个箱子名称,以空格分隔def find_box_index(key, boxes):key_sorted = sorted(key) # 对 key 字符串排序,作为匹配基准for i, box in enumerate(boxes): # 遍历所有箱子# 过滤箱子中的字母字符,并转换为小写filtered_chars = [c.lower() for c in box if c.isalpha()]# 检查过滤后的字符排序是否与 key 的排序相同if key_sorted == sorted(filtered_chars):return i + 1 # 返回匹配箱子的索引(从 1 开始)return -1 # 如果没有匹配,返回 -1# 输出结果
print(find_box_index(key, boxes))
java解法
- 解题思路
- 这段代码的目标是从一组字符串(containers)中找到第一个可以与输入字符串 referenceKey 匹配的容器。匹配的条件是两个字符串的字符完全相同(忽略大小写和非字母字符),且字符顺序无关。匹配时返回容器的索引(从 1 开始),如果找不到匹配则返回 -1。
代码分为三个主要部分:
字符串预处理:过滤非字母字符,将字母转换为小写,并按字母顺序排序。
匹配逻辑:将 referenceKey 和每个容器经过相同的预处理后进行比较。
输出结果:根据匹配结果输出第一个匹配容器的索引或 -1。
import java.util.Scanner;
import java.util.Arrays;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 读取输入,预处理 referenceKeyString referenceKey = sanitizeAndSort(scanner.nextLine());// 读取 containers 列表,按空格分隔String[] containers = scanner.nextLine().split(" ");// 查找匹配索引int matchingIndex = findMatchIndex(referenceKey, containers);// 输出匹配结果System.out.println(matchingIndex);}/*** 预处理字符串:过滤非字母字符,转为小写,并排序** @param input 原始字符串* @return 经过排序和过滤后的字符串*/private static String sanitizeAndSort(String input) {// 去除非字母字符,转小写,转为字符数组char[] filteredChars = input.replaceAll("[^a-zA-Z]", "").toLowerCase().toCharArray();// 对字符数组排序Arrays.sort(filteredChars);// 转为字符串返回return new String(filteredChars);}/*** 在 containers 中查找第一个匹配 referenceKey 的索引** @param referenceKey 预处理后的参考字符串* @param containers 容器字符串数组* @return 第一个匹配的容器索引(从 1 开始),未找到返回 -1*/private static int findMatchIndex(String referenceKey, String[] containers) {for (int i = 0; i < containers.length; i++) {// 预处理当前容器String sortedBox = sanitizeAndSort(containers[i]);// 比较参考字符串与当前容器是否匹配if (referenceKey.equals(sortedBox)) {return i + 1; // 返回 1 基索引}}return -1; // 没有找到匹配,返回 -1}
}
C++解法
- 解题思路
更新中
C解法
更新中
JS解法
更新中
注意:
如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏
相关文章:
【华为OD-E卷-寻找关键钥匙 100分(python、java、c++、js、c)】
【华为OD-E卷-寻找关键钥匙 100分(python、java、c、js、c)】 题目 小强正在参加《密室逃生》游戏,当前关卡要求找到符合给定 密码K(升序的不重复小写字母组成) 的箱子,并给出箱子编号,箱子编…...

vscode 使用说明
文章目录 1、文档2、技巧显示与搜索宏定义和包含头文件 3、插件4、智能编写5、VSCode 与 C(1)安装(2)调试(a)使用 CMake 进行跨平台编译与调试(b)launch.json(cÿ…...

【Linux系统编程】:信号(2)——信号的产生
1.前言 我们会讲解五种信号产生的方式: 通过终端按键产生信号,比如键盘上的CtrlC。kill命令。本质上是调用kill()调用函数接口产生信号硬件异常产生信号软件条件产生信号 前两种在前一篇文章中做了介绍,本文介绍下面三种. 2. 调用函数产生信号 2.1 k…...

Android Studio AI助手---Gemini
从金丝雀频道下载最新版 Android Studio,以利用所有这些新功能,并继续阅读以了解新增内容。 Gemini 现在可以编写、重构和记录 Android 代码 Gemini 不仅仅是提供指导。它可以编辑您的代码,帮助您快速从原型转向实现,实现常见的…...

【day09】面向对象——静态成员和可变参数
【day08】面向对象——封装重点:1.封装:a.将细节隐藏起来,不让外界直接调用,再提供公共接口,供外界通过公共接口间接使用隐藏起来的细节b.代表性的:将一段代码放到一个方法中(隐藏细节),通过方法名(提供的公共接口)去调用private关键字 -> 私有的,被private修饰之后别的类不…...
Android学习(七)-Kotlin编程语言-Lambda 编程
Lambda 编程 而 Kotlin 从第一个版本开始就支持了 Lambda 编程,并且 Kotlin 中的 Lambda 功能极为强大。Lambda 表达式使得代码更加简洁和易读。 2.6.1 集合的创建与遍历 集合的函数式 API 是入门 Lambda 编程的绝佳示例,但在开始之前,我们…...

彻底认识和理解探索分布式网络编程中的SSL安全通信机制
探索分布式网络编程中的SSL安全通信机制 SSL的前提介绍SSL/TLS协议概述SSL和TLS建立在TCP/IP协议的基础上分析一个日常购物的安全问题 基于SSL的加密通信SSL的安全证书SSL的证书的实现安全认证获取对应的SSL证书方式权威机构获得证书创建自我签名证书 SSL握手通信机制公私钥传输…...

【libuv】Fargo信令2:【深入】client为什么收不到服务端响应的ack消息
客户端处理server的ack回复,判断链接连接建立 【Fargo】28:字节序列【libuv】Fargo信令1:client发connect消息给到server客户端启动后理解监听read消息 但是,这个代码似乎没有触发ack消息的接收: // 客户端初始化 void start_client(uv_loop_t...
Vue3自定义事件
自定义事件是一种组件间通信的方式,它允许子组件向父组件发送信息。子组件可以通过自定义事件向父组件传递数据以及事件,当自定义事件触发时,子组件可以借此将子组件的数据传递给父组件并使父组件对此做出相应的操作。 1.声明自定义事件 使…...
BeautifulSoup 与 XPath 用法详解与对比
BeautifulSoup(bs4) 和 XPath 是学习python爬虫过程中常常用到的库,本文将详细介绍它们的功能、使用方法、优缺点以及实际应用中的区别和选择建议。 1. BeautifulSoup 用法详解 1.1 什么是 BeautifulSoup? BeautifulSoup 是 Pyt…...
Emacs 折腾日记(五)——elisp 数字类型
本文是参考 emacs lisp 简明教程 写的,很多东西都是照搬里面的内容,如果各位读者觉得本文没有这篇教程优秀或者有抄袭嫌疑、又或者觉得我更新比较慢、再或者其他什么原因,请直接阅读上述链接中的教程。 上一篇我们讲了elisp中的流程控制结构相…...

重拾设计模式--外观模式
文章目录 外观模式(Facade Pattern)概述定义 外观模式UML图作用 外观模式的结构C 代码示例1C代码示例2总结 外观模式(Facade Pattern)概述 定义 外观模式是一种结构型设计模式,它为子系统中的一组接口提供了一个统一…...
源码编译llama.cpp for android
源码编译llama.cpp for android 我这有已经编译好的版本,直接下载使用: https://github.com/turingevo/llama.cpp-build/releases/tag/b4331 准备 android-ndk 已下载: /media/wmx/ws1/software/qtAndroid/Sdk/ndk/23.1.7779620版本 &am…...
StarRocks 排查单副本表
文章目录 StarRocks 排查单副本表方式1 查询元数据,检查分区级的副本数方式2 SHOW PARTITIONS命令查看 ReplicationNum修改副本数命令 StarRocks 排查单副本表 方式1 查询元数据,检查分区级的副本数 # 方式一 查询元数据,检查分区级的副本数…...

Windows11 家庭版安装配置 Docker
1. 安装WSL WSL 是什么: WSL 是一个在 Windows 上运行 Linux 环境的轻量级工具,它可以让用户在 Windows 系统中运行 Linux 工具和应用程序。Docker 为什么需要 WSL: Docker 依赖 Linux 内核功能,WSL 2 提供了一个高性能、轻量级的…...

线程知识总结(二)
本篇文章以线程同步的相关内容为主。线程的同步机制主要用来解决线程安全问题,主要方式有同步代码块、同步方法等。首先来了解何为线程安全问题。 1、线程安全问题 卖票示例,4 个窗口卖 100 张票: class Ticket implements Runnable {priv…...

解决vscode ssh远程连接服务器一直卡在下载 vscode server问题
目录 方法1:使用科学上网 方法2:手动下载 方法3 在使用vscode使用ssh远程连接服务器时,一直卡在下载"vscode 服务器"阶段,但MobaXterm可以正常连接服务器,大概率是网络问题,解决方法如下: 方…...

【Cadence射频仿真学习笔记】IC设计中电感的分析、建模与绘制(EMX电磁仿真,RFIC-GPT生成无源器件及与cadence的交互)
一、理论讲解 1. 电感设计的两个角度 电感的设计可以从两个角度考虑,一个是外部特性,一个是内部特性。外部特性就是把电感视为一个黑盒子,带有两个端子,如果带有抽头的电感就有三个端子,需要去考虑其电感值、Q值和自…...
Definition of Done
Definition of Done English Version The team agrees on, a checklist of criteria which must be met before a product increment “often a user story” is considered “done”. Failure to meet these criteria at the end of a sprint normally implies that the work …...

【漏洞复现】CVE-2023-37461 Arbitrary File Writing
漏洞信息 NVD - cve-2023-37461 Metersphere is an opensource testing framework. Files uploaded to Metersphere may define a belongType value with a relative path like ../../../../ which may cause metersphere to attempt to overwrite an existing file in the d…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...