华为OD机试 - 过滤组合字符串(Java & JS & Python)
Posted 伏城之外
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为OD机试 - 过滤组合字符串(Java & JS & Python)相关的知识,希望对你有一定的参考价值。
题目描述
数字0、1、2、3、4、5、6、7、8、9分别关联 a~z 26个英文字母。
- 0 关联 “a”,”b”,”c”
- 1 关联 “d”,”e”,”f”
- 2 关联 “g”,”h”,”i”
- 3 关联 “j”,”k”,”l”
- 4 关联 “m”,”n”,”o”
- 5 关联 “p”,”q”,”r”
- 6 关联 “s”,”t”
- 7 关联 “u”,”v”
- 8 关联 “w”,”x”
- 9 关联 “y”,”z”
例如7关联”u”,”v”,8关联”x”,”w”,输入一个字符串例如“78”,和一个屏蔽字符串“ux”,那么“78”可以组成多个字符串例如:“ux”,“uw”,“vx”,“vw”,过滤这些完全包含屏蔽字符串的每一个字符的字符串,然后输出剩下的字符串。
输入描述
无
输出描述
无
用例
输入 | 78 ux |
输出 | uw vx vw |
说明 |
华为OD机试真题 JavaScript 实现过滤组合字符串2023 Q1 | 100分
所有题目均有四种语言实现。C++ 实现目录、Python实现目录、JavaScript实现目录、Java实现目录
题目
数字0、1、2、3、4、5、6、7、8、9分别关联 a~z 26个英文字母。
0 关联 "a","b","c"
1 关联 "d","e","f"
2 关联 "g","h","i"
3 关联 "j","k","l"
4 关联 "m","n","o"
5 关联 "p","q","r"
6 关联 "s","t"
7 关联 "u","v"
8 关联 "w","x"
9 关联 "y","z"
例如7关联"u","v",8关联"x","w",输入一个字符串例如“78”,
和一个屏蔽字符串“ux”,那么“78”可以组成多个字符串例如:“ux”,“uw”,“vx”,“vw”,过滤这些完全包含屏蔽字符串的每一个字符的字符串,然后输出剩下的字符串。
示例1: 输入输出示例仅供调试,后台判题数据一般不包含示例
输入:
78
ux
输出:
uw vx vw
说明:ux完全包含屏蔽字符串ux,因此剔除
思路
1:一个数组来保存关联的英文字母。
2:先全排列方法遍历求出所有的组合,然后利用 string 的 includes 函数即可判定是否完全包含。
3:includes() 方法用于判断字符串是否包含指定的子字符串。如果找到匹配的字符串则返回 true,否则返回 false。
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
var char_map = ["abc", "def", "ghi", "jkl", "mno", "pqr", "st", "uv", "wx", "yz"]
var result = []
function main(num_str, block_str)
var nums = num_str.split("").map((val) => char_map[val])
block_str = [...block_str].sort().join("")
dfs(nums, 0, [], block_str)
console.log(result.join(" "))
//排列组合用递归的方法即可
function dfs(nums, index, path, block_str)
if (index === nums.length)
if (![...path].sort().join("").includes(block_str))
result.push(path.join(""))
return
for (let j = 0; j < nums[index].length; j++)
path.push(nums[index][j])
dfs(nums, index + 1, path, block_str)
path.pop()
main("78", "ux")
要求
时间限制: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机试 - 过滤组合字符串(Java & JS & Python)的主要内容,如果未能解决你的问题,请参考以下文章
华为OD机试真题 JavaScript 实现过滤组合字符串2023 Q1 | 100分
华为OD机试真题 JS 实现组合出合法最小数2023 Q1 | 100分