(A卷,100分)- 密室逃生游戏(Java & JS & Python)

题目描述

小强正在参加《密室逃生》游戏,当前关卡要求找到符合给定 密码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
说明 第 2 个箱子中的 Abc ,符合密码 abc。
输入 abc
s,sdf134 A2c4bd 523[]
输出 -1
说明 第2个箱子中的Abcd,与密码不完全匹配,不符合要求

题目解析

2023.03.26 本题更新了题目描述,增加备注,增加了一个新用例。

新的题目信息,依旧是存在问题的,即第二行输入的箱子字符串中可能包含空格,但是输入描述中又说让我们按照空格分割,这里我的解法默认第二行输入的每个箱子字符串中不包含空格。

其次,本题用例2中,第二个箱子只保留字母后,变为字符串Abcd,从用例说明可知,该字符串机试转为小写升序后的abcd和依旧不能密码abc完全匹配,因此题目的完全匹配意思应该是和密码要完全相同。

但是如果箱子字符串是aabbcc这种,能否和密码abc完全匹配呢?

看了满分答案后,这种情况也是不能完全匹配,即不能对箱子字符串做去重处理。

JavaScript算法源码

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

const lines = [];
rl.on("line", (line) => {
  lines.push(line);

  if (lines.length === 2) {
    const key = lines[0];
    const boxes = lines[1].split(" ");
    console.log(getResult(key, boxes));

    lines.length = 0;
  }
});

/**
 * @param {*} key 升序的不重复小写字母组成的密码K
 * @param {*} boxes 数组,元素box为字符串
 * @returns 包含key的忽略大小写的所有字母的box
 */
function getResult(key, boxes) {
  for (let i = 0; i < boxes.length; i++) {
    const box = boxes[i];
    const tmp = [...box.replace(/[^a-zA-Z]/g, "").toLowerCase()]
      .sort()
      .join("");

    if (key == tmp) {
      return i + 1;
    }
  }
  return -1;
}

Java算法源码

import java.util.Arrays;
import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    String key = sc.nextLine();
    String[] boxes = sc.nextLine().split(" ");

    System.out.println(getResult(key, boxes));
  }

  public static int getResult(String key, String[] boxes) {
    for (int i = 0; i < boxes.length; i++) {
      String box = boxes[i];
      char[] tmp = box.replaceAll("[^a-zA-Z]", "").toLowerCase().toCharArray();

      Arrays.sort(tmp);
      if (key.equals(new String(tmp))) {
        return i + 1;
      }
    }

    return -1;
  }
}

Python算法源码

# 输入获取
key = input()
boxes = input().split()


# 算法入口
def getResult(key, boxes):
    for i in range(len(boxes)):
        box = boxes[i]
        tmp = list("".join(list(filter(lambda c: 'a' <= c <= 'z' or 'A' <= c <= 'Z', list(box)))).lower())
        tmp.sort()

        if key == "".join(tmp):
            return i+1

    return -1


# 算法调用
print(getResult(key, boxes))

免责声明:

1、IT资源小站为非营利性网站,全站所有资料仅供网友个人学习使用,禁止商用
2、本站所有文档、视频、书籍等资料均由网友分享,本站只负责收集不承担任何技术及版权问题
3、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除下载链接并致以最深的歉意
4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
5、一经注册为本站会员,一律视为同意网站规定,本站管理员及版主有权禁止违规用户
6、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和IT资源小站的同意
7、IT资源小站管理员和版主有权不事先通知发贴者而删除本文

0

评论0

站点公告

没有账号?注册  忘记密码?