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;
}
难度: ⭐
思路:
- 对字符串排序有两种方法:
- 对字符的ASCII码大小判定进行排序,也可以直接分隔split成数组,在sort
- 利用数据结构Map映射,依次读取映射上的字符,就可以得到拍好序的字符
- 保留原字符串格式(空格、非字符的原有位置)
遍历原数组,碰到字符的位置取读取上一步得到的字符,碰到非字符的就直接获取原串。