华为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、相似题目

相关推荐
我命由我123451 小时前
Java NIO 编程 - NIO Echo Server、NIO Client(NIO 异步客户端、NIO Selector 异步客户端)
java·开发语言·网络·java-ee·intellij-idea·intellij idea·nio
嗯、.1 小时前
使用Itext9生成PDF水印,兼容不同生成引擎的坐标系(如: Skia、OpenPDF)
java·pdf·itextpdf·openpdf·坐标变换矩阵
前端炒粉2 小时前
35.LRU 缓存
开发语言·javascript·数据结构·算法·缓存·js
星释3 小时前
Rust 练习册 75:ETL与数据转换
开发语言·rust·etl
happyjoey2173 小时前
使用Qt自带的Maintenance Tool将Qt6.9升级为QT6.10
开发语言·qt
断剑zou天涯4 小时前
【算法笔记】窗口内最大值或最小值的更新结构
java·笔记·算法
m***66734 小时前
SQL 实战—递归 SQL:层级结构查询与处理树形数据
java·数据库·sql
鲸沉梦落6 小时前
Java中的Stream
java
yihuiComeOn6 小时前
[源码系列:手写Spring] AOP第二节:JDK动态代理 - 当AOP遇见动态代理的浪漫邂逅
java·后端·spring
p***h6437 小时前
JavaScript在Node.js中的异步编程
开发语言·javascript·node.js