题解 | #字符串合并处理#
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) { // 先合并输入的字符串 // 然后分别获取 偶数索引的值和奇数索引的值 并排序 然后放回原字符串 // 如字符 '4',其二进制为 0100 ,则翻转后为 0010 ,也就是 2 。转换后的字符为 '2'。 line = line.replace(' ','').split('') // 总的数组 let arr = [] // 奇数 let arr1 = [] // 1 3 5 // 偶数 let arr2 = [] // 0 2 4 line.forEach((item,index)=>{ index % 2 ? arr1.push(item):arr2.push(item) }) arr1.sort() arr2.sort() for(let i=0;i<line.length;i++){ // 这里是重点,把奇数数组和偶数数组重新放回原字符串 // 先遍历原字符串长度 // 判断i是奇数,就一个个从奇数数组中获取 // 判断i是偶数,就一个个从偶数数组中获取 i % 2 ? arr.push(arr1.shift()) : arr.push(arr2.shift()) } // 转换 // 注意:字母是16进制的,转成十进制 parseInt('a',16) // 转二进制或16进制 toString(n) arr = arr.map(item=>{ // 下面的做法是:现在通过16进制转10进制,让然后转2进制 // ('0'.repeat(4-item.length)+item)然后解决数字拿到的二进制不受4位数的问题 // 然后把二进制反转后,转成10进制 // 最后转成16进制,由于字母大于f的,不参与转换,所以不匹配f if(/[g-zG-Z]/.test(item)){ return item } item = parseInt(item,16).toString(2) item = parseInt(('0'.repeat(4-item.length)+item).split('').reverse().join(''),2).toString(16).toUpperCase() return item }) console.log(arr.join('')) });