题解 | #字符串排序#

字符串排序

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

步骤

  • 使用两个对象保存普通字符和特殊字符
  • 遍历字符串,将特殊字符的下标作为 key,字符作为值保存到对象 record1,将普通字符转化为小写,并且作为 key,其值作为一个数组,保持元素的大小写状态
  • 对 record2 进行排序,得到一个顺序正确的数组
  • 循环一次输入的字符串长度,依次取出普通字符串,在特殊字符下标相等的情况下取出特殊字符
  • 输出结果
while (input = readline()) {
  const record1 = {};
  const record2 = {};
  [...input].forEach((v, idx) => {
    if (/[^a-zA-Z]/.test(v)) {
      record1[idx] = v;
    } else {
      const key = v.toLowerCase();
      if (record2[key] === undefined) {
        record2[key] = [v];
      } else {
        record2[key] = [...record2[key], v];
      }
    }
  });

  let arr = Object.entries(record2);
  arr.sort((a, b) => (a[0] < b[0] ? -1 : 1));
  arr = arr.reduce((init, cur) => {
    return init.concat(cur[1]);
  }, []);
  let res = '';
  let arrIdx = 0;
  for (let i = 0; i < input.length; i++) {
    res += record1[i] !== undefined ? record1[i] : arr[arrIdx++];
  }
  console.log(res);
}
全部评论

相关推荐

01-24 08:13
已编辑
合肥工业大学 Java
程序员牛肉:没啥问题。标准的流水线简历,但是学历好一点,所以应该是有约面的机会的。 这段时间可以考虑把自己的两个项目彻底的理一理。争取能够讲清楚每一个功能点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务