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映射,依次读取映射上的字符,就可以得到拍好序的字符
- 保留原字符串格式(空格、非字符的原有位置)
遍历原数组,碰到字符的位置取读取上一步得到的字符,碰到非字符的就直接获取原串。