题解 | #字符串合并处理#
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value; void (async function () { while ((line = await readline())) { // 第一步,合并 console.log(convert(sortStr(line.split(" ").join("")))); } })(); /** * 第二步,排序 */ function sortStr(str) { str = str.trim(); const odd = []; // 奇数下标字符 const even = []; // 偶数下标字符 let result = ""; // 按奇偶分组 str .split("") .forEach((item, i) => (i % 2 ? even.push(item) : odd.push(item))); // 排序 [odd, even].forEach((item) => item.sort((a, b) => (b > a ? -1 : 1))); // 合并 for (let i = 0; i < Math.max(odd.length, even.length); i++) { result += `${odd[i] ?? ""}${even[i] ?? ""}`; } return result; } /** * 第三步,转换 */ function convert(str) { const temp = str .split("") .map((item) => (/[0-9a-fA-F]/.test(item) ? transform(item) : item)); // 转二进制翻转,再转十六进制 function transform(s) { let binStr = parseInt(s, 16) .toString(2) .padStart(4, 0) .split("") .reverse() .join(""); return parseInt(binStr, 2).toString(16).toUpperCase(); } return temp.join(""); }