题解 | #字符串合并处理#
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', function (line) {
// 获取两个字符串
let [str1, str2] = line.split(' ')
// 合并字符串
let str = str1 + str2
// 分隔奇偶字符组成新字符串
let [even, odd] = ['', '']
for(let i = 0; i < str.length; i++){
// 奇数字符串
if(i % 2){
odd += str[i]
}else {
even += str[i]
}
}
// 排序
odd = odd.split('').sort().join('')
even = even.split('').sort().join('')
let newStr = ''
// 将排序后奇偶字符串按照奇偶位置重新组合
for(let i = 0; i < even.length; i++){
newStr += `${even[i] || ''}${odd[i] || ''}`
}
const charArr = newStr.split('')
// 排序之后,对 '0'~'9'、'A'~'F'和'a'~'f',转换
for(let i = 0; i < charArr.length; i++){
// 检测是否需要转换
if(/^[0-9a-fA-F]$/.test(charArr[i])){
// 如果是a-f这些则要进行数据转换
switch(charArr[i]) {
case 'a':
case 'A':
charArr[i] = '10';
break;
case 'b':
case 'B':
charArr[i] = '11';
break;
case 'c':
case 'C':
charArr[i] = '12';
break;
case 'd':
case 'D':
charArr[i] = '13';
break;
case 'e':
case 'E':
charArr[i] = '14';
break;
case 'f':
case 'F':
charArr[i] = '15';
break;
}
// 转二进制,然后倒叙,然后再转成十六进制,转大写
// 放回原来的位置,再小写转大写
// parseInt(字符串/数字,参数一是多少进制的数) 作用是搞成十进制数
// 有点问题,就是1转二进制的时候,会变成1,有问题,解决:使用,padStart(4,'0')
// 转换后的二进制四位显示,然后不足四位的的在前面补0
charArr[i] = parseInt(Number(charArr[i]).toString(2).padStart(4,'0').split('').reverse().join(''), 2).toString(16).toLocaleUpperCase()
}
}
// 打印最终结果
console.log(charArr.join(''))
});
查看7道真题和解析