题解 | #字符串合并处理#

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) {
    // 先合并输入的字符串
    // 然后分别获取 偶数索引的值和奇数索引的值 并排序 然后放回原字符串

    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的,不参与转换,所以不匹配g以上
        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(''))
    

});
全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务