华为OD机试真题【真正的密码】

1、题目描述

【题目描述】

在一行中输入一个字符串数组,如果其中一个字符串的所有以索引0开头的子串在数组中都有,那么这个字符串就是潜在密码,

在所有潜在密码中最长的是真正的密码,如果有多个长度相同的真正的密码,那么取字典序最大的为唯一的真正的密码,求唯一的真正的密码。

【示例1】
输入

h he hel hell hello o ok n ni nin ninj ninja
输出

ninja

说明

按要求,hello、ok、ninja都是潜在密码。

检查长度,hello、ninja是真正的密码。

检查字典序,ninja是唯一真正密码。

【示例2】
输入

a b c d f
输出

f

说明

按要求,a b c d f 都是潜在密码。

检查长度,a b c d f 是真正的密码。

检查字典序,f是唯一真正密码。

2、解题思路

将输入的字符串存入数组;使用HashSet存储这些字符串,确保唯一性;

遍历输入的字符串数组,针对每一个字符串,从索引1开始,判断其所有以索引0开头的子串是否在HashSet中;如果所有子串都在HashSet中,说明当前字符串是潜在密码;

如果当前潜在密码长度大于真正的密码长度,更新真正的密码为当前潜在密码;

如果当前潜在密码长度等于真正的密码长度,但字典序大于真正的密码,更新真正的密码为当前潜在密码;

3、参考代码

java 复制代码
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class 真正的密码 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String[] strings = in.nextLine().split(" ");

            Set<String> wordSet = new HashSet<>();
            for (String string : strings) {
                wordSet.add(string);
            }

            String realPwd = "";
            // 遍历输入的字符串数组
            for (String string : strings) {
                boolean isPwd = false;
                for (int i = 1; i < string.length(); i++) {
                    String subStr = string.substring(0, i);
                    if (!wordSet.contains(subStr)) {
                        isPwd = true;
                        break;
                    }
                }

                // 如果所有子串都在set里,说明当前字符是潜在密码
                if (isPwd) {
                    if (string.length() > realPwd.length()) {
                        realPwd = string;
                    }
                    if (string.length() == realPwd.length() && string.compareTo(realPwd) > 0) {
                        realPwd = string;
                    }
                }
            }
            System.out.println(realPwd);
        }
    }
}

4、相似题目

相关推荐
gis开发之家17 小时前
Spring Boot 4 定时任务与异步线程池:从 @Scheduled 到高并发任务编排(生产级实战)
java·spring boot·后端·wpf·spring boot4
郑州光合科技余经理18 小时前
本地生活系统:多业务订单字段怎么分账本导出
java·开发语言·前端·数据库·uni-app·php·ai编程
weixin1997010801619 小时前
《跨境二手ERP的3种对接模式:自研API / SaaS中间件 / 平台认证服务商,怎么选?》(附Python源码)
开发语言·python·中间件
YangYang9YangYan19 小时前
2026 校招审计风控岗位 JD 拆解,工具、专业能力与面试考点
java·大数据·人工智能·数据分析
传奇开心果编程21 小时前
【Rust入门知识点学与练】第24课:Trait 基础
开发语言·学习·rust
wuminyu1 天前
Kafka中sendfile与mmap实现机制解析
java·linux·c语言·jvm·c++
考虑考虑1 天前
Java实现hmacsha256加密算法
java·后端·java ee
captain3761 天前
▲网络原理(2)-TCP
java·服务器·网络·tcp/ip·java-ee
MetaLite1 天前
SpringBoot接口分层规范-外网网关内部服务与参数边界
java·数据库·spring boot
Co_Hui1 天前
Java 线程状态
java