?目录
✅ 242.有效的字母异位词
➡️ 349.两个数组的交集
➡️ 202.快乐数
➡️ 1.两数之和
242.有效的字母异位词
⏰ 1.解题思路
- 创建一个新数组,用来记录字符串中字符出现的次数---相当于将字符映射到数组也就是哈希表的索引下标上
- 遍历第一个字符串,将出现的字符次数记录+1,关键代码's.charCodeAt(i) - "a".charCodeAt(i)'
- 遍历第二个字符串,将出现的字符次数-1
- 最后判断数组中元素值是不是都为0,如果不是则返回false
? 2.代码
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function (s, t) {
if (s.length !== t.length) return false;
let arr = new Array(26).fill(0); //新建数组,每个元素的值为0
let pivod = "a".charCodeAt(0); //97,不用特意去记ASCII,这里只需要相对位置,eg: "f".charCodeAt(0)=102,减去97,相对位置是5
for (let i = 0, n = s.length; i < n; i++) {
arr[s.charCodeAt(i) - pivod]++; //在arr[index]的数值上加1
arr[t.charCodeAt(i) - pivod]--;
}
return arr.every((i) => i === 0); //返回的是一个布尔值
};
? 3.知识点补充
? 快速判断一个元素是是否出现在集合中,就要想到用哈希法来解决问题。
? 常见的3种哈希表的数据结构,适用范围
-
- 数组:简单的hash表,哈希值小,范围可控
- set:数据结构大
- map:数据结构法,并且key有对应的value值
? String.prototype.charCodeAt() 方法返回的 0 到 65535 之间的整数
eg: "a".charCodeAt(0) = 97 是它的ASCII码
? Array.prototype.every() 方法返回的是一个布尔值,是测试一个数组内的所有元素是否都能通过指定函数的测试。
eg: arr.every((i) => i === 0) //测试的就是这个数组中是不是所有元素都是0