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

字符串合并处理

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("");
}

全部评论

相关推荐

08-06 16:32
已编辑
天津理工大学 Java
点赞 评论 收藏
分享
程序员小白条:这比例牛逼,750:1
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务