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

字符串合并处理

https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f

将第一第二第三步归纳为两个function,第一第二为一个function,第三步为一个function,具体代码如下:
//先编写排序function
function sortArray(string) {
    //将输入字符串转换为数组
    let arr = string.split('');
    //新建奇数数组喝偶数数组
    let oddArray = [];
    let evenArray = [];
    //分别将原数组中的奇数元素和偶数元素放入相应数组中
    for (let i = 0; i < arr.length; i++) {
        if (i % 2 == 0) {
            evenArray.push(arr[i])
        }
        else {
            oddArray.push(arr[i])
        }
    }
    //将奇数、偶数数组排序
    evenArray.sort();
    oddArray.sort();
    //再次遍历原数组,利用splice方法将排序后的奇数、偶数组元素依次按顺序换入原数组中
    for (let i = 0; i < arr.length; i++) {
        if (i % 2 == 0) {
            arr.splice(i, 1, evenArray[i/2])
        }
        else {
            arr.splice(i, 1, oddArray[(i-1)/2])
        }
    }
    //返回得到的新数组
    return arr.join('');
}
//编写转换function
function transformArray(string) {
    //将原字符串转换为数组
    let arr = string.split('');
    //单独编写需要转换的正则表达式
    let regex = /[A-Fa-f0-9]/;
    //遍历原数组
    for (let i = 0; i< arr.length; i++) {
        //如符合正则表达式的情况,则按照题目规则先将十六进制元素转换为二进制,反转之后再转换为十六进制(需注意两个点,部分十六进制转换为二进制数据之后不足四位数,
        //可通过(‘0000’ + str).substr(-4)来补齐,另外最终转换为十六进制的字母需转换为大写英文字母)
        if (regex.test(arr[i])) {
            let trans =('0000' + parseInt(arr[i], 16).toString(2)).substr(-4).split('').reverse().join('');
            arr.splice(i, 1, parseInt(trans, 2).toString(16).toUpperCase())
        } 
    }
    //返回得到的新数组
    return arr.join('');
}

var line = readline().split(' ').join('');
//console.log(sortArray(line));
let newLine = sortArray(line);
let result = transformArray(newLine);
console.log(result);                

全部评论

相关推荐

字节 飞书绩效团队 (n+2) * 15 + 1k * 12 + 1w
点赞 评论 收藏
分享
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-21 19:05
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务