🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[success] # 刷题前知识补充 在做字母字符问题时候可以利用**ASCII** 对应的字符集作为数组脚标,用来记录出现次数,例如英文小写单词**a-z**,所对应的字符集**97-122**,举个例子现在要记录`azsxzxxs` 中每个字符出现 1. 先创建一个26长度数组 2. 将字符转换对应ascii码,记录到对应数组位置 ~~~ // 只会有小写字母 const w = 'azsxzxxs' function getWordCounts(words) { // 创建一个26 长度数组 const ls = new Array(26).fill(0) // 因为小写a 是从97开始 const ascii_a = 'a'.charCodeAt() // 循环每个单词找到对应的ascii码记录保存 for (let i = 0; i < words.length; i++) { // charCodeAt 参数是当前字符所应转换为ascii,减掉97 const idx = words.charCodeAt(i) - ascii_a ls[idx]++ } // 打印每个字符出现此时 return ls.reduce((acc, cur, index) => { // 转换将ascii 码对应码转换为对应小写单词 if (cur) { const w = String.fromCharCode(index + ascii_a) acc[w] = cur } return acc }, {}) } console.log(getWordCounts(w)) // { a: 1, s: 2, x: 3, z: 2 } ~~~ * 利用Map 映射来做 ~~~ // 只会有小写字母 const w = 'azsxzxxs' function getWordCounts(words) { const obj = {} for (let w of words) { if (!obj[w]) obj[w] = 0 obj[w]++ } return obj } console.log(getWordCounts(w)) ~~~