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

在这里插入图片描述

华为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算法源码

# 导入集合模块
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算法源码

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.xdnf.cn/news/1554945.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

将 LabelMe 标签转换为 YOLO 标签

将 LabelMe 标签转换为 YOLO 标签 在机器学习工作流程中&#xff0c;数据处理是一个关键步骤。通常我们会使用不同的工具来标注数据&#xff0c;而每种工具都有其特定的格式。在这篇文章中&#xff0c;我们将介绍如何将 LabelMe 标注的数据转换为 YOLO 格式&#xff0c;以便在…

IntelliJ IDEA 2024.2 新特性概览

文章目录 1、重点特性:1.1 改进的 Spring Data JPA 支持1.2 改进的 cron 表达式支持1.3 使用 GraalJS 作为 HTTP 客户端的执行引擎1.4 更快的编码时间1.5 K2 模式下的 Kotlin 性能和稳定性改进 2、用户体验2.1 改进的全行代码补全2.2 新 UI 成为所有用户的默认界面2.3 Search E…

Java开发必知必会的一些工具

本文主要介绍 Java 程序员应该学习的一些基本和高级工具。 如果你想成为一名更好的程序员&#xff0c;最重要的技巧之一就是学习你的编程工具。 Java 世界中存在着如此多的工具&#xff0c;从 Eclipse、NetBeans 和 IntelliJ IDEA 等著名的 IDE 到 JConsole、VisualVM、Eclipse…

学术环境中能力对敏捷努力评估的影响

论文标题&#xff1a;Impact of competence on agile effort estimation in academic setting 作者信息&#xff1a; Luka FrstTomaž HoveljaMarko PoženelDamjan Vavpotǐc 均来自斯洛文尼亚卢布尔雅那大学计算机与信息科学学院。 论文出处&#xff1a;发表于《Software…

02 nth_element 与第k小

题目&#xff1a; 方案一&#xff1a;sort排序 #include<bits/stdc.h> using namespace std;int main() {int n;int k;cin>>n>>k;int a[n]{0};for(int i0;i<n;i){cin>>a[i];}sort(a,an); cout<<a[k]<<endl;}方案二&#xff1a;…

心觉:梦想成真的三个核心步骤

Hi&#xff0c;我是心觉&#xff0c;与你一起玩转潜意识、脑波音乐和吸引力法则&#xff0c;轻松掌控自己的人生&#xff01; 挑战每日一省写作190/1000天 梦想成真是每个人的愿望 但是希望你不要把“梦想成真”这四个字当成愿望或许愿&#xff0c;因为它实际上是一个成事的…

Python数据结构与算法问题详解

Python数据结构与算法问题详解 Python 作为一种高级编程语言&#xff0c;凭借其简洁的语法和强大的内置库&#xff0c;成为了数据结构与算法学习的绝佳工具。本文将深入解析几种常见的数据结构&#xff0c;并结合具体的算法&#xff0c;展示如何在实际问题中高效解决问题。通过…

分享9个论文写作中强化观点三要素的奇技淫巧

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 在学术写作中&#xff0c;强化观点的表达至关重要&#xff0c;它不仅能够提升论文的说服力&#xff0c;还能使论点更加明确和有力。为了帮助作者更有效地传达观点&#xff0c;本文将分享…

10月5日星期六今日早报简报微语报早读

10月5日星期六&#xff0c;农历九月初三&#xff0c;早报#微语早读。 1、再次晋级&#xff01;郑钦文闯入中网女单半决赛&#xff1b; 2、2024年国庆档新片票房突破15亿&#xff1b; 3、厦金“小三通”航线复航&#xff0c;国庆期间预计运送旅客超2.7万人次&#xff1b; 4、…

【宽搜】3. leetcode 515 在每个树行中找最大值

1 题目描述 题目链接&#xff1a;在每个树行中找最大值 2 题目解析 根据题目描述&#xff0c;是找出每一行中的最大值&#xff0c;这毋庸置疑是使用宽度优先遍历了。我在这篇文章中讲解了宽度优先遍历的模板&#xff0c;如果没有看的同学可以先去看一下。 这道题和模板的不…

基于CAN总线的TMS320F28335 Bootloader设计说明

1 设计目的 根据客户要求&#xff0c;开发一款基于CAN总线的TI公司TMS320F28335 DSP&#xff08;数字信号处理器&#xff09;bootloader&#xff0c;以方便应用程序的刷写。CAN设备采用周立功CAN卡&#xff08;USBCAN-I、USBCAN-II、USBCAN-E-mini&#xff09;。 2 专有信息 …

javaWeb开发

Java Web开发涉及使用Java编程语言进行Web应用程序的开发。下面是有关Java Web开发的一些主要技术、工具和教程资源&#xff0c;以及一些案例和项目。 1. 基础知识 1. Java SE&#xff08;Java Standard Edition&#xff09;: 学习Java语言的基础语法和面向对象编程概念。 2. H…

模型的深度优化

文章目录 一、测试模型是否正确二、图形打印直观观察三、保存训练模型四、正确率&#xff08;仅使用于分类问题&#xff09; 一、测试模型是否正确 本文承接我的上一篇文章完整网络模型训练&#xff08;一&#xff09; 运用测试数据集&#xff08;test_dataloader&#xff09;…

【宽搜】4. leetcode 103 二叉树的锯齿形层序遍历

1 题目描述 题目链接&#xff1a;二叉树的锯齿形层序遍历 2 题目解析 根据题目描述&#xff0c;第一行是从左往右遍历&#xff0c;第二行是从右往左遍历。和层序遍历的区别就是&#xff1a; 在偶数行需要从右往左遍历。 因此&#xff0c;只需要在层序遍历的基础上增加一个变…

【WebGis开发 - Cesium】三维可视化项目教程---初始化场景

系列文章目录 未完待续~ 目录 系列文章目录引言一、Cesium引入项目1.1 下载资源1.2 项目引入Cesium 二、初始化地球2.1 创建基础文件2.1.1 创建Cesium工具方法文件2.1.2 创建主页面 2.2 看下效果 三、总结 引言 本教程主要是围绕Cesium这一开源三维框架开展的可视化项目教程。…

银河麒麟服务器镜像完整性验证:MD5校验

银河麒麟服务器镜像完整性验证&#xff1a;MD5校验 步骤一&#xff1a;获取标准MD5值步骤二&#xff1a;计算MD5值步骤三&#xff1a;对比MD5值 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在下载或传输银河麒麟服务器镜像时&#xff0c…

Oracle架构之表空间详解

文章目录 1 表空间介绍1.1 简介1.2 表空间分类1.2.1 SYSTEM 表空间1.2.2 SYSAUX 表空间1.2.3 UNDO 表空间1.2.4 USERS 表空间 1.3 表空间字典与本地管理1.3.1 字典管理表空间&#xff08;Dictionary Management Tablespace&#xff0c;DMT&#xff09;1.3.2 本地管理方式的表空…

Ubuntu 中 Redis ,MySQL 基本使用

1、Redis &#xff08;1&#xff09;启动Redis 服务端客户端命令 服务端 ps aux | grep redis 查看redis服务器进程 sudo kill -9 pid 杀死redis服务器 sudo redis-server /etc/redis/redis.conf 指定加载的配置文件客户端 连接redis&#xff1a; redis-cli运⾏测试命令&am…

《python语言程序设计》2018版第8章19题几何Rectangle2D类(上)--原来我可以直接调用

2024.9.29 玩了好几天游戏。 感觉有点灵感了。还想继续玩游戏。 2024.10.4 今天练习阿斯汤加练完从早上10点睡到下午2点.跑到单位玩游戏玩到晚上10点多. 现在回家突然有了灵感 顺便说一句,因为后弯不好,明天加练一次. 然后去丈母娘家. 加油吧 第一章、追求可以外调的函数draw_r…

【Python】pyenv:管理多版本 Python 环境的利器

pyenv 是一个强大的 Python 版本管理工具&#xff0c;它允许开发者在同一台计算机上轻松安装和管理多个 Python 版本。对于需要在不同项目中使用不同 Python 版本的开发者来说&#xff0c;pyenv 是一个非常有用的工具&#xff0c;因为它可以帮助用户在全局和项目级别控制 Pytho…