华为OD机试真题 JavaScript 实现真正的密码2023 Q1 | 100分
Posted MISAYAONE
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为OD机试真题 JavaScript 实现真正的密码2023 Q1 | 100分相关的知识,希望对你有一定的参考价值。
所有题目均有四种语言实现。C++ 实现目录、Python实现目录、JavaScript实现目录、Java实现目录
题目
在一行中输入一个字符串数组,如果其中一个字符串的所有以索引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是唯一真正密码。
思路
1:利用hashset 将字符串查找操作的时间复杂度降低,然后按照题目要求的几个条件取出真正的密码即可。
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博客
不熟悉的可以自行查阅。
这里给出这位博主的总结:
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", "o", "ok", "n", "ni", "nin", "ninj", "ninja"])
要求
时间限制: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机试真题 JavaScript 实现最大利润2023 Q1 | 100分
华为OD机试真题 JavaScript 实现最大利润2023 Q1 | 100分
华为OD机试真题 JavaScript 实现日志限流2023 Q1 | 100分