>[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))
~~~
- 刷题准备
- 统计数组中元素出现次数
- Leetcode -- 442数组中重复的数据
- leetcode -- 448 找到所有数组中消失的数字
- 字符类似题
- Leetcode -- 1002 查找共用字符
- Leetcode -- 1370上升下降字符串
- 指针类题解
- Leetcode -- 283 移动零
- Leetcode -- 26. 删除有序数组中的重复项
- Leetcode -- 80. 删除有序数组中的重复项 II
- Leetcode -- 27. 移除元素
- Leetcode -- 344. 反转字符串
- Leetcode -- 125 验证回文串
- Leetcode -- 11 盛最多水的容器
- Leetcode -- 1480. 一维数组的动态和