题解 | #字符串排序#

字符串排序

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

const input = readline().split('');
const helper = [];
const letter = /[A-Z]/i;

// 保存非字母的字符和其所在下标
const nonLetter = new Map();
// 把字母按插入排序的思路做由小到大排序
// 把非字母的字符及其位置下标单独保存起来,当所有字母排序完成后,在按原先下标位置插回去
for (let i = 0, len = input.length; i < len; i++) {
  const cur = input[i];
  // 是字母
  if (letter.test(cur)) {
    let j = helper.length;
    for (; j > 0; j--) {
      if (helper[j - 1].toLowerCase() > input[i].toLowerCase()) {
        helper[j] = helper[j - 1];
        continue;
      }
      break;
    }
    helper[j] = input[i];
  } else {
    nonLetter.set(i, cur);
  }
}

for (const [i, v] of nonLetter.entries()) {
  helper.splice(i, 0, v);
}

console.log(helper.join(''));

全部评论

相关推荐

双非坐过牢:非佬,可以啊10.28笔试,11.06评估11.11,11.12两面,11.19oc➕offer
点赞 评论 收藏
分享
11-03 14:38
重庆大学 Java
AAA求offer教程:我手都抬起来了又揣裤兜了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务