题解 | #字符串合并处理#
字符串合并处理
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('')) });