华为OD机试 - 最长的密码(Python/JS/C/C++ 2024 E卷 100分)

news/2024/10/5 11:37:30/

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

小王正在进行游戏大闯关,有一个关卡需要输入一个密码才能通过,密码获得的条件如下:

在一个密码本中,每一页都有一个由26个小写字母组成的密码,每一页的密码不同,需要从这个密码本中寻找这样一个最长的密码, 从它的末尾开始依次去掉一位得到的新密码也在密码本中存在。

请输出符合要求的密码,如果有多个符合要求的密码,返回长度最大的密码。

若没有符合要求的密码,则返回空字符串。

二、输入描述

密码本由一个字符串数组组成,不同元素之间使用空格隔开,每一个元素代表密码本每一页的密码。

三、输出描述

一个字符串

四、测试用例

测试用例1:

1、输入

h he hel hell hello

2、输出

hello

3、说明

测试用例2:

1、输入

b ereddred bw bww bwwl bwwlm bwwln

2、输出

bwwlm

3、说明

五、解题思路

  1. 读取输入的字符串并将其拆分成字符串数组,表示密码本中的每一页密码。
  2. 将密码本的每个密码存入一个HashSet,以便于快速查找密码。
  3. 将密码数组按照密码长度进行降序排序,以确保我们能优先找到最长的密码。
  4. 对于每个密码,依次去掉末尾的字符,检查每个子密码是否存在于集合中。如果所有的子密码都存在,则返回这个密码。
  5. 如果找到了符合条件的密码,则输出这个密码;如果没有找到,则返回空字符串。

六、Python算法源码

python"># 导入集合模块
from collections import defaultdictdef find_longest_password(passwords):# 创建一个集合用于存储密码本中的密码password_set = set(passwords)longest_password = ""  # 存储符合条件的最长密码# 遍历每个密码for password in passwords:current = password  # 从当前密码开始# 检查当前密码的每个子密码while current:  # 当当前密码不为空if current not in password_set:  # 如果子密码不在集合中break  # 跳出循环current = current[:-1]  # 去掉末尾一个字符# 如果当前密码有效且长度大于已记录的最长密码if len(current) == 0 and len(password) > len(longest_password):longest_password = password  # 更新最长密码return longest_password  # 返回找到的最长密码# 主程序入口
if __name__ == "__main__":# 读取输入字符串,并拆分为数组passwords = input().strip().split()# 调用方法获取符合条件的最长密码result = find_longest_password(passwords)# 输出结果print(result)

七、JavaScript算法源码

javascript">function findLongestPassword(passwords) {// 创建一个集合用于存储密码本中的密码const passwordSet = new Set(passwords);let longestPassword = "";  // 存储符合条件的最长密码// 遍历每个密码for (const password of passwords) {let current = password;  // 从当前密码开始// 检查当前密码的每个子密码while (current.length > 0) {  // 当当前密码不为空if (!passwordSet.has(current)) {  // 如果子密码不在集合中break;  // 跳出循环}current = current.slice(0, -1);  // 去掉末尾一个字符}// 如果当前密码有效且长度大于已记录的最长密码if (current.length === 0 && password.length > longestPassword.length) {longestPassword = password;  // 更新最长密码}}return longestPassword;  // 返回找到的最长密码
}// 主程序入口
const input = require('fs').readFileSync('/dev/stdin', 'utf-8').trim();
const passwords = input.split(" ");  // 拆分输入为密码数组// 调用方法获取符合条件的最长密码并输出结果
console.log(findLongestPassword(passwords));

八、C算法源码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_LENGTH 100  // 定义最大长度// 函数声明
char* findLongestPassword(char* passwords[], int n);int main() {char* passwords[MAX_LENGTH];  // 用于存储密码char buffer[200];  // 用于读取输入int n = 0;  // 密码数量// 读取输入fgets(buffer, sizeof(buffer), stdin);// 按空格分割输入char* token = strtok(buffer, " ");while (token != NULL) {passwords[n++] = token;  // 存储每个密码token = strtok(NULL, " ");  // 获取下一个密码}// 调用函数获取符合条件的最长密码char* result = findLongestPassword(passwords, n);// 输出结果printf("%s\n", result);return 0;
}char* findLongestPassword(char* passwords[], int n) {// 创建一个集合用于存储密码本中的密码char* passwordSet[MAX_LENGTH];int passwordSetSize = 0;// 将密码加入集合for (int i = 0; i < n; i++) {passwordSet[passwordSetSize++] = passwords[i];}char* longestPassword = "";  // 存储符合条件的最长密码// 遍历每个密码for (int i = 0; i < n; i++) {char* current = passwords[i];  // 从当前密码开始char temp[MAX_LENGTH];  // 用于存储当前密码的副本strcpy(temp, current);  // 复制当前密码// 检查当前密码的每个子密码while (strlen(temp) > 0) {  // 当当前密码不为空int found = 0;  // 标记是否找到for (int j = 0; j < passwordSetSize; j++) {if (strcmp(temp, passwordSet[j]) == 0) {  // 如果子密码在集合中found = 1;  // 标记找到break;  // 跳出循环}}if (!found) {break;  // 如果未找到,跳出循环}temp[strlen(temp) - 1] = '\0';  // 去掉末尾一个字符}// 如果当前密码有效且长度大于已记录的最长密码if (strlen(temp) == 0 && strlen(current) > strlen(longestPassword)) {longestPassword = current;  // 更新最长密码}}return longestPassword;  // 返回找到的最长密码
}

九、C++算法源码

#include <iostream>
#include <unordered_set>
#include <vector>
#include <string>using namespace std;string findLongestPassword(const vector<string>& passwords) {// 创建一个集合用于存储密码本中的密码unordered_set<string> passwordSet(passwords.begin(), passwords.end());string longestPassword;  // 存储符合条件的最长密码// 遍历每个密码for (const auto& password : passwords) {string current = password;  // 从当前密码开始// 检查当前密码的每个子密码while (!current.empty()) {  // 当当前密码不为空if (passwordSet.find(current) == passwordSet.end()) {  // 如果子密码不在集合中break;  // 跳出循环}current.pop_back();  // 去掉末尾一个字符}// 如果当前密码有效且长度大于已记录的最长密码if (current.empty() && password.length() > longestPassword.length()) {longestPassword = password;  // 更新最长密码}}return longestPassword;  // 返回找到的最长密码
}// 主程序入口
int main() {string input;  // 用于读取输入getline(cin, input);  // 读取一行输入vector<string> passwords;  // 存储密码的数组string temp;  // 临时变量存储单个密码// 按空格分割输入并存入数组for (char c : input) {if (c == ' ') {passwords.push_back(temp);  // 添加密码temp.clear();  // 清空临时变量} else {temp += c;  // 添加字符到临时变量}}if (!temp.empty()) {passwords.push_back(temp);  // 添加最后一个密码}// 调用函数获取符合条件的最长密码并输出结果cout << findLongestPassword(passwords) << endl;return 0;
}

🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2024 E卷 200分)

🏆本文收录于,华为OD机试真题(Python/JS/C/C++)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述


http://www.ppmy.cn/news/1534923.html

相关文章

YOLO11改进|卷积篇|引入全维动态卷积ODConv

目录 一、【ODConv】全维动态卷积1.1【ODConv】卷积介绍1.2【ODConv】核心代码 二、添加【ODConv】卷积2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【ODConv】全维动态卷积 1.1【ODConv】卷积介绍 ODConv利用一种全新的多维注意力机…

CICD Jenkins实现Pipline

一、安装 1、由于 Jenkins 是基于 Java 的&#xff0c;首先需要确保你的系统中安装了 Java。推荐使用 OpenJDK 11。可以通过以下命令安装&#xff1a; apt update apt install openjdk-11-jdk2、在安装 Jenkins 之前&#xff0c;你需要将其仓库添加到你的系统中。首先&#x…

蛋白质结构中原子坐标转换

在蛋白质结构分析中,原子坐标经过旋转矩阵和平移向量的转换是常见操作。一般情况下,假设一个原子在结构 A 中的坐标为 (x, y, z),在经过旋转矩阵 u 和平移向量 t 的变换后,得到新的坐标 (X, Y, Z)。然后,再将新的坐标反向映射回原始坐标系。 基本数学公式 1. 变换公式:…

scrapy爬取汽车、车评数据【中】

这个爬虫我想分三期来写&#xff1a; ✅ 第一期写如何爬取汽车的车型信息&#xff1b; ✅ 第二期写如何爬取汽车的车评&#xff1b; ✅ 第三期写如何对车评嵌入情感分析结果&#xff0c;以及用简单的方法把数据插入mysql中&#xff1b; 技术基于scrapy框架、BERT语言模型、mysq…

AI不可尽信

看到某项目有类似这样的一段代码 leaves : make([]int, 10) leaves leaves[:0]没理解这样的连续两行,有何作用? 初始化一个长度和容量都为10的切片,接着把切片长度设置为0 即如下demo: (在线地址) package mainimport "fmt"func main() {leaves : make([]int, 1…

增强现实中的物体识别与跟踪

增强现实&#xff08;AR&#xff09;中的物体识别与跟踪是实现虚拟内容与现实世界无缝融合的关键技术。以下是该领域的主要技术和方法概述&#xff1a; 1. 物体识别 1.1 特征提取 SIFT、SURF、ORB&#xff1a;传统的特征提取算法用于识别图像中的关键点并生成描述符&#xf…

STM32-HAL库驱动DHT11温湿度传感器 --2024.9.28

目录 一、教程简介 二、驱动原理讲解 &#xff08;一&#xff09;通信4步骤 &#xff08;二&#xff09;传感器数据解析 三、CubeMX生成底层代码 &#xff08;一&#xff09;基础配置 &#xff08;二&#xff09;配置DHT11的驱动引脚 &#xff08;三&#xff09;配置串口 四…

选择网络安全模式启动Windows系统,解决PC无法连接网络问题

目录 1、电脑无法连接网络 2、发现C:\Windows\System32\drivers路径下的很多文件不见了 3、使用360安全卫士中的断网急救箱工具修复&#xff0c;也就解决不了问题 4、重启系统&#xff0c;以网络安全模式启动系统&#xff0c;修复系统网络模块&#xff0c;完美解决问题 5、…