首页 > 编程语言 >【华为OD-E卷-寻找关键钥匙 100分(python、java、c++、js、c)】

【华为OD-E卷-寻找关键钥匙 100分(python、java、c++、js、c)】

时间:2024-12-21 17:30:55浏览次数:6  
标签:箱子 匹配 String 字符 python OD key 字符串 java

【华为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);

        // 读取输入,预处理 referenceKey
        String 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解法

  • 解题思路

更新中

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

标签:箱子,匹配,String,字符,python,OD,key,字符串,java
From: https://blog.csdn.net/CodeClimb/article/details/144533802

相关文章

  • 【华为OD-E卷-最多提取子串数目 100分(python、java、c++、js、c)】
    【华为OD-E卷-最多提取子串数目100分(python、java、c++、js、c)】题目给定[a-z],26个英文字母小写字符串组成的字符串A和B,其中A可能存在重复字母,B不会存在重复字母,现从字符串A中按规则挑选一些字母,可以组成字符串B。挑选规则如下:同一个位置的字母只能挑选一次......
  • 数据结构与算法Python版 散列与区块链
    文章目录一、散列二、完美散列函数三、完美散列函数的应用-区块链一、散列散列Hashing构造一个新的数据结构,使得查找算法的复杂度降到O(1),这种概念称为“散列Hashing”由数据项的值来确定其存放位置,数据项应该出现在大概什么位置,就可以直接到那个位置看看数据项是......
  • 数据结构与算法Python版 顺序查找与二分查找
    文章目录一、顺序查找二、二分查找一、顺序查找顺序查找SequentialSearch通过下标,我们就可以按照顺序来访问和查找数据项,这种技术称为“顺序查找”如果数据项保存在如列表这样的集合中,我们会称这些数据项具有线性或者顺序关系在Python列表中,这些数据项的存储位置......
  • 29.Python基础篇-网络基础理论
    重要知识点BS与CS架构BS(Browser/Server)架构:基于浏览器和服务器的架构,客户端通过浏览器访问服务器上的应用程序或服务。特点:客户端只需要一个浏览器,无需安装复杂的软件,服务器端处理大部分业务逻辑。应用:Web应用(如Web浏览器访问网站)。CS(Client/Server)架构:客户端和服务......
  • 基于 Django和Python 的影视数据可视化系统
    文章目录程序资料获取一、项目技术二、项目内容和项目介绍三、核心代码四、效果图五、资料获取程序资料获取......
  • 将相同的PanelPartcode对象合并
    具有相同PanelPartcode的对象被合并,并且它们的PartCodes属性用逗号连接。methods:{mergeObjects(){constmergedArray=[];consttemObj={};this.array.forEach(item=>{constcode=item.PanelPartcode;if(!temObj[code]){......
  • node.js毕设电影院售票网站程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于电影院售票网站的研究,现有研究主要集中在电影院运营管理的整体框架方面,对于售票网站这一特定板块的专门研究较少。在国内外,电影院的数字化运营逐渐......
  • node.js毕设电影院售票系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于电影院售票系统的研究,现有研究主要以传统票务管理模式为主,专门针对现代化、多功能电影院售票系统(包含用户管理、电影信息、电影分类、电影资讯、影......
  • python语言jjsp爬虫程序代码
    importrequestsimportreimportosy=‘https://vip.lz-cdn5.com/20220705/30947_eb6de902/1200k/hls/mixed.m3u8’h={‘user-agent’:‘Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/131.0.0.0Safari/537.36Edg/131.0.......
  • node.js毕设皓皓代驾前 论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于代驾相关问题的研究,现有研究主要以代驾的市场发展、需求状况等为主,专门针对类似“毕设皓皓代驾”这种特定代驾系统的研究较少。在国内外,代驾行业虽......