题解 | #字符串排序#
字符串排序
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);
}