描述
对于给定的由可见字符和空格组成的字符串,按照下方的规则进行排序:
∙按照字母表中的顺序排序(不区分大小写);
∙同一字母的大小写同时存在时,按照输入顺序排列;
∙非字母字符保持原来的位置不参与排序;
直接输出排序后的字符串。
字符串由 ASCII 码在 32 到 126 范围内的字符组成。您可以参阅下表获得其详细信息。
输入描述:
在一行上输入一个长度为 1≦length(s)≦1000 ,由上表中的字符组成的字符串 s 。
输出描述:
输出一个字符串,代表按照规则排序后的字符串。
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
// Write your code here
while ((line = await readline())) {
handle(line);
}
function handle(str) {
//提取所有字母并按不区分大小写顺序排序,同时保持相同字母大小写的顺序
let letters = str
.split("")
.filter((i) => /[a-zA-Z]/.test(i))
.sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));
let result = [];
let letterIndex = 0;
for (let i = 0; i < str.length; i++) {
if (/[a-zA-Z]/.test(str[i])) {
result.push(letters[letterIndex++]);
} else {
result.push(str[i]);
}
}
console.log(result.join(""));
}
})();