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