JavaScript题解 | #字符串排序#

字符串排序

https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584

const rl = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.on('line', line => {
    const res = charSort(line);

    console.log(res);
})

function charSort(line) {
  let res = "";
  // 这个直接写的方式有点搓,大家可以根据自己的思路去写
  // 比如,根据ASCII a = 97, 去循环构造一个map也是可以的
  const map = {
    a: "",
    b: "",
    c: "",
    d: "",
    e: "",
    f: "",
    g: "",
    h: "",
    i: "",
    j: "",
    k: "",
    l: "",
    m: "",
    n: "",
    o: "",
    p: "",
    q: "",
    r: "",
    s: "",
    t: "",
    u: "",
    v: "",
    w: "",
    x: "",
    y: "",
    z: "",
  };
  // 将原串,是字符的[A-Za-z]放到上一步构造的map结构里
  for (let i = 0; i < line.length; i++) {
    const temp = line[i];
    if (/[A-Za-z]/.test(temp)) {
      map[temp.toLowerCase()] += temp;
    }
  }

  // 得到排好序的字符,我们是将原值放入map结构里的,所以直接取值即可map[key]
  let sort_str = "";
  for (const i in map) {
    sort_str += map[i];
  }
  // 遍历原串,保留原串中的非字符格式
  for (let i = 0, j = 0; i < line.length; i++) {
    const temp = line[i];
    if (/[A-Za-z]/.test(temp)) {
      res += sort_str[j];
      j++;
    } else {
      res += temp;
    }
  }

  return res;
}

难度: ⭐

思路:

  1. 对字符串排序有两种方法:
  2. 对字符的ASCII码大小判定进行排序,也可以直接分隔split成数组,在sort
  3. 利用数据结构Map映射,依次读取映射上的字符,就可以得到拍好序的字符
  4. 保留原字符串格式(空格、非字符的原有位置)

遍历原数组,碰到字符的位置取读取上一步得到的字符,碰到非字符的就直接获取原串。

全部评论

相关推荐

威猛的小饼干正在背八股:挂到根本不想整理
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务