【华为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…...
终极指南:如何用3行命令实现美国签证预约自动化抢号
终极指南:如何用3行命令实现美国签证预约自动化抢号 【免费下载链接】us-visa-bot US Visa Bot 项目地址: https://gitcode.com/gh_mirrors/us/us-visa-bot 还在为美国签证面试预约的漫长等待而焦虑吗?手动刷新页面、熬夜守候已成为过去式。今天&…...
wpr_simulation机器人仿真平台:架构设计与高级应用实战
wpr_simulation机器人仿真平台:架构设计与高级应用实战 【免费下载链接】wpr_simulation 项目地址: https://gitcode.com/gh_mirrors/wp/wpr_simulation wpr_simulation是一个基于ROS(机器人操作系统)的完整机器人仿真平台࿰…...
chatgpt-mirai-qq-bot内存持久化:文件和Redis存储方案对比
chatgpt-mirai-qq-bot内存持久化:文件和Redis存储方案对比 你是否在为聊天机器人的记忆管理而烦恼?在多轮对话中,如何确保机器人能够记住上下文,同时保证数据的安全性和性能?chatgpt-mirai-qq-bot提供了两种内存持久化…...
利用Taotoken CLI工具一键配置团队开发环境中的大模型调用参数
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 利用Taotoken CLI工具一键配置团队开发环境中的大模型调用参数 在团队开发环境中,统一管理大模型调用参数是一个常见痛…...
GitHub Desktop汉化神器:3分钟让英文界面变中文
GitHub Desktop汉化神器:3分钟让英文界面变中文 【免费下载链接】GitHubDesktop2Chinese GithubDesktop语言本地化(汉化)工具 【GitHub桌面客户端中文汉化】 项目地址: https://gitcode.com/gh_mirrors/gi/GitHubDesktop2Chinese 还在为GitHub Desktop的英文…...
长期使用Taotoken Token Plan套餐在项目开发中的成本优势体会
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期使用Taotoken Token Plan套餐在项目开发中的成本优势体会 在项目开发中,尤其是涉及大模型API调用的场景࿰…...
提升3倍效率的Windows桌面端酷安社区解决方案:基于UWP平台的高性能第三方客户端
提升3倍效率的Windows桌面端酷安社区解决方案:基于UWP平台的高性能第三方客户端 【免费下载链接】Coolapk-UWP 一个基于 UWP 平台的第三方酷安客户端 项目地址: https://gitcode.com/gh_mirrors/co/Coolapk-UWP Coolapk-UWP是一款基于UWP平台的第三方酷安客户…...
AI智能体开发(二):技术栈选择与工具集成
主流开发框架深度对比 在上一篇中我们了解了Agent的核心架构,现在让我们看看如何用代码实现这些架构组件。目前市面上有多个成熟的Agent开发框架,每个都有其独特的优势和适用场景。 LangChain 定位:最全面的LLM应用开发框架 核心优势: 生态系统最完善 - 支持100+ LLM提…...
AMD Ryzen处理器终极调试指南:免费开源SMUDebugTool完整使用教程
AMD Ryzen处理器终极调试指南:免费开源SMUDebugTool完整使用教程 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: …...
Kimi推出超实用插件!让AI真正像你一样操作浏览器
月之暗面(Moonshot AI)正式推出了一款名为 Kimi WebBridge 的浏览器扩展插件。这款产品的核心理念是让AI Agent像你本人一样操作浏览器。它带着你的登录状态、你的Cookie、你的账号,去点击、滑动、输入,填写表单、提取信息、跨站点…...
