算法题--华为od机试考试(敏感字段加密、寻找身高相近的小朋友、员工派遣)

目录

敏感字段加密

题目描述

输入描述

输出描述

示例1

输入

输出

示例2

输入

输出

示例3

输入

输出

解析

答案

寻找身高相近的小朋友

题目描述

输入描述

输出描述

示例1

输入

输出

解析

答案

员工派遣

题目描述

问题

输入描述

输出描述

示例1

输入

输出

输入说明

解析

答案


敏感字段加密

考察理解能力、循环、hash。

题目描述

给定一个由多个命令字组成的命令字符串:

1、字符串长度小于等于127字节,只包含大小写字母,数字,下划线和偶数个双引号,

2、命令字之间以一个或多个下划线 进行分割,

3、可以通过两个双引号""来标识包含下划线_的命令字或空命令字(仅包含两个双引号的命令字),双引号不会在命令字内部出现

请对指定索引的敏感字段进行加密,替换为******(6个*),并删除命令字前后多余的下划线_。如果无法找到指定索引的命令字,输出字符串ERROR

输入描述

输入为两行,第一行为命令字索引K(从O开始),第二行为命令字符串S

输出描述

输出处理后的命令字符串,如果无法找到指定索引的命令字,输出字符串ERROR的

示例1

输入

1

password__a12345678_timeout_100

输出

password_******_timeout_100

示例2

输入

1

"password__a12345678"_timeout_100

输出

"password__a12345678"_******_100

示例3

输入

0

"password__a12345678"_timeout_100

输出

******__timeout_100

解析

首先理解一下命令字,当双引号不出现时,命令字一共有通过下划线分割后的单词个数。当双引号出现时,双引号包裹的为一个命令字,

未包裹的通过分割下划线确定个数。

一个一个字符的读取,设置一个标志位,当读到双引号时改变标志位,设置结尾的为双引号,双引号结尾后还原标志位,改为一个下划线结尾。用

对象的key、value存储每次的命令和分割符。key为数字,每次记录加一,value为一个对象存储是否为命令和字符串。最后只需要通过key的数字遍历

找到对应的索引,将value存储的字符串改为******,最后按key从小到大对应的value字符相加。

答案

function getSecrityStr(str) {
    let [n, target] = str.split('\n')
    let len = target.length
    let sign = true
    let i = 0
    let tmp = ''
    let obj = {}
    let j = 0
    while (i < len) {
        // 下划线为结尾
        if (sign) {
            // 当为双引号时改变标志位,判断命令结尾为双引号
            if (target[i] === '"') {
                tmp = tmp + target[i]
                sign = false
                // 已经记录了一段命令字符后结尾  
            } else if (target[i] === '_' && tmp.length) {
                obj[j] = {
                    value: tmp,
                    order: true
                }
                j++
                obj[j] = {
                    value: '_',
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值