题解 | #字符串排序#
字符串排序
http://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584
**直接对输入的字符串进行排序,排序后,使用map记住符号的位置,然后提取出字母保存到变量。提取原始字符串里面所有字母相同的字符(筛选的时候不区分大小写,存储时需要区分)。然后遍历刚才存储的字母,直接替换到刚才排序好的字母中。最后将存储的符号安装位置插入到排序好的字母中 ,便得到结果 **
let line = readline();
let itemIndex = new Map();
let reg = /[^a-z]/gi;
while (reg.test(line)) {
itemIndex.set(reg.lastIndex - 1, line[reg.lastIndex - 1]);
}
let sortLine = line.toLowerCase().split("").sort().join("");
let tmp = sortLine.split(/[^a-z]/g).join("");
let sameLetter = {};
let line2 = line.match(/[a-z]/gi).join("");
for (let index = 0; index < line2.length; index++) {
let e = line2[index];
sameLetter[e.toLowerCase()] = (sameLetter[e.toLowerCase()] || "") + e;
}
Object.values(sameLetter).forEach((e) => {
tmp = tmp.replace(e.toLowerCase(), e);
});
tmp = tmp.split("");
for (let [k, v] of itemIndex.entries()) {
tmp.splice(k, 0, v);
}
console.log(tmp.join(""));