代码随想录算法训练营第六天 | 242.有效的字母异位词 、349. 两个数组的交集 、 202. 快乐数 、 1. 两数之和

发布时间 2023-04-25 17:42:02作者: karen哈哈哈

?目录

    ✅ 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