华为OD机试真题 JavaScript 实现最长的密码2023 Q1 | 100分

Posted MISAYAONE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为OD机试真题 JavaScript 实现最长的密码2023 Q1 | 100分相关的知识,希望对你有一定的参考价值。

   所有题目均有四种语言实现。C++ 实现目录Python实现目录Java实现目录JavaScript实现目录

题目

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

在一个密码本中,每一页都有一个由26个小写字母组成的若干位密码,每一页的密码不同,需要从这个密码本中寻找这样一个最长的密码,

从它的末尾开始依次去掉一位得到的新密码也在密码本中存在

请输出符合要求的密码,如果有多个符合要求的密码,则返回字典序最大的密码。

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

输入描述

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

输出描述

一个字符串

示例1  输入输出示例仅供调试,后台判题数据一般不包含示例

输入

h he hel hell hello

输出

hello

示例2  输入输出示例仅供调试,后台判题数据一般不包含示例

输入

b ereddred bw bww bwwl bwwlm bwwln

输出

bwwln

 

思路

1:有点类似22年Q4的另外一道题:真正的密码,是描述上有所差异?逻辑一摸一样。

2:利用set 将字符串查找操作的时间复杂度降低,然后按照题目要求的几个条件取出真正的密码即可。

JS输入输出

javascript 本身有两种模式:V8 和 Node,两种模式在输入上略有不同。

Node:

let readline = require("readline");
 
const rl = readline.createInterface(
  input: process.stdin,
  output: process.stdout,
);

rl.on('line', function(line)
    // line表示的就是输入的一行
    let lines = line.split(' ').map(Number);
);

V8:

//假设输入为:
4
5
1 2

// readline() 就表示输入的一行,和python中的 input()函数用法基本一致
let n = readline().split('').map(item=>parseInt(item));  // 4
let k = readline().split(' ').map(item=>parseInt(item)); // 5
let [nums] = readline().split(' ').map(item=>parseInt(item)); // 1 2

具体我也是参考了网上的博主的文章:ACM模式下JavaScript(js)的输入输出 V8 Node_我先润了的博客-CSDN博客

ACM格式javascript 输入输出 - 衣囧~ - 博客园 (cnblogs.com)

不熟悉的可以自行查阅。

这里给出这位博主的总结:

        node.js=V8+内置基本模块,相当于java中的JRE=JVM+java标准库

        node就是带有能操作IO和网络库的V8引擎,提供了很多可调用的API使得JavaScript能够读写文件,网络请求,系统信息等操作。对V8引擎进行了封装,执行JavaScript的速度更快,性能更好。

Code

//JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。
function main(input_strs) 
    sorted_str_map = u_sort(input_strs)
    var result = [] 
    for (let key in sorted_str_map) 
        var hash_set = new Set(sorted_str_map[key])
        while (sorted_str_map[key].length) 
            var top = input_strs.pop()
            let i = 1
            while (i < top.length && hash_set.has(top.substring(0, i))) 
                i++
            
            if (i === top.length) 
                result.push(top)
                break
            
        
    
    
    console.log(result.sort((a, b) =>
        a.length !== b.length ? b.length - a.length : b > a ? 1 : -1
    )[0])

 
function u_sort(input_strs) 
    var sorted_strs = input_strs.sort()
    return sorted_strs.reduce((c, d) => 
        var prefix = d[0]
        c[prefix] ? c[prefix].push(d) : (c[prefix] = [d])
        return c
    , )

 
main(["h", "he", "hel", "hell", "hello"])

要求

时间限制:C/C++ 1秒,其他语言 2秒

空间限制:C/C++262144K,其他语言524288K

64bit IO Format:%lld

语言限定:
C(clang11), C++(clang++11), Pascal(fpc 3.0.2), Java(javac 1.8), Python2(2.7.3), 
php(7.4.7), C#(mcs5.4), ObjC(gcc 5.4), Pythen3(3.9), JavaScript Node(12.18.2), JavaScript V8(6.0.0),
Sqlite(3.7.9), R(4.0.3), Go(1.14.4), Ruby(2.7.1), Swift(5.3), matlab(Octave 5.2), Pypy2(pypy2.7.13),
Pypy3(pypy3.6.1), Rust(1.44), Scala(2.11.12), Kotlin(1.4.10), Groovy(3.0.6), TypeScript(4.1.2), mysql(8.0)

以上是关于华为OD机试真题 JavaScript 实现最长的密码2023 Q1 | 100分的主要内容,如果未能解决你的问题,请参考以下文章

华为OD机试真题 Python 实现最长回文字符串2023 Q1 | 100分

华为OD机试真题 C++ 实现最长回文字符串2023 Q1 | 100分

华为OD机试真题 Java 实现最长回文字符串2023 Q1 | 100分

华为OD机试真题 JS 实现最长回文字符串2023 Q1 | 100分

华为OD机试真题 C 实现最长回文字符串2023 Q1 | 100分

华为OD机试真题 JavaScript 实现真正的密码2023 Q1 | 100分