第四天华为机考练习(JavaScript node)
注:华为机试和剑指offer的JavaScript Node的书写方式不同,剑指offer只需学核心代码然后return,华为机试需要自写输入输出,输出console就行。
1. 华为机试HJ59 找出字符串中第一个只出现一次的字符
https://www.nowcoder.com/questionTerminal/e896d0f82f1246a3aa7b232ce38029d4
找出字符串中第一个只出现一次的字符
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async() => (await iter.next()).value;
void async function() {
// Write your code here
while (line = await readline()) {
const maphash = new Map()
let val = ''
let flag = true
for (let i = 0; i < line.length; i++) {
val = maphash.get(line[i]) ? maphash.set(line[i], maphash.get(line[i]) + 1) : maphash.set(line[i], 1)
}
for (const [key, value] of val.entries()) {
if (value === 1) {
flag = false
console.log(key)
break
} else {
falg = true
}
}
if (flag) {
console.log(-1)
}
}
}()
2. 华为机试HJ58 输入n个整数,输出其中最小的K个
https://www.nowcoder.com/questionTerminal/69ef2267aafd4d52b250a272fd27052c
输入n个整数,找出其中最小的k个整数并按升序输出
输入:
第一行输入两个整数n和k
第二行输入一个整数数组
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async() => (await iter.next()).value;
void async function() {
// Write your code here
while (line = await readline()) {
let str = await readline()
let narr = line.split(' ')
let arr = str.split(' ').sort((a, b) => a - b)
let result=[]
for (let i = 0; i < Number(narr[1]); i++) {
result.push(arr[i])
}
console.log(result.join(' '))
}
}()
3. 华为机试HJ81 字符串字符匹配
https://www.nowcoder.com/questionTerminal/22fdeb9610ef426f9505e3ab60164c93
判断短字符串S中的所有字符是否在长字符串T中全部出现。
请注意本题有多组样例输入。
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async() => (await iter.next()).value;
void async function() {
// Write your code here
while (shortstr = await readline()) {
let longstr = await readline()
let flag = shortstr.split('').every(item => longstr.includes(item))
console.log(flag)
}
}()
4. 华为机试HJ26 字符串排序
https://www.nowcoder.com/questionTerminal/5190a1db6f4f4ddb92fd9c365c944584
描述
编写一个程序,将输入字符串中的字符按如下规则排序。规则 1 :英文字母从 A 到 Z 排列,不区分大小写。如,输入: Type 输出: epTy规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。如,输入: BabA 输出: aABb规则 3 :非英文字母的其它字符保持原来的位置。
如,输入: By?e 输出: Be?y
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async() => (await iter.next()).value;
void async function() {
// Write your code here
while (str = await readline()) {
let arr = []
let enarr = str.split(/[^a-zA-Z]/g).join('').split('')
enarr.sort((a, b) => {
return a.toLowerCase().charCodeAt(0) - b.toLowerCase().charCodeAt(0)
})
for (let i = 0; i < str.length; i++) {
if (/[^a-zA-Z]/.test(str[i])) {
arr[i] = str[i]
}
}
for (let i = 0; i < str.length; i++) {
arr[i] = arr[i] !== undefined ? arr[i] : enarr.shift()
}
console.log(arr.join(''))
}
}()
每天练习算法题针对华为机考
