当前位置: 首页 > article >正文

leetcode242-有效字母异位词

leetcode 242
在这里插入图片描述

什么是字母异位词

字母异位词是指:由相同的字母组成,但字母排列顺序不同的两个字符串。
字母异位词特点:

  • 两个字符串的长度相同
  • 两个字符串中每个字母出现的频次相同

思路

利用哈希表来解决此题,首先创建一个hash map,然后循环s字符串,对每个出现的字母进行记录,如果出现过就+1,没出现过就设置为1,再循环t字符串,如果把每个字母-1,如果-1以后发现当前字母是<0那么可能是两种情况:t中的字母出现了但是s中字母没出现过的,或者t中字母出现的次数大于s中该字母出现的次数,不管是哪一种都是不符合条件的,所以return false
如果t遍历以后都没出现不符合的,这说明是异位词,所以return true;

实现

方法1 hash map
var isAnagram = function(s, t) {
    if(s.length!==t.length) return false;
    const map = new Map();
    for(let i = 0;i<s.length;i++){
        const item = s[i]
        map.set(item,(map.get(item) || 0) + 1);
    }
    for(let i = 0;i<t.length;i++){
        const item = t[i];
        map.set(item,(map.get(item) || 0) - 1);
        if(map.get(item) < 0){
            return false;
        }
    }
    return true;
};
方法2 哈希数组

通过字符串的charCodeAt方法能获取到字母的ASCII编码,字母中从a-z中ASCII编码是递增的,所以我们可以设置‘a’为0,然后总共26个字母,把每个字母的ASCII码-字母a的ASCII码则表示对应在数组中的索引

var isAnagram = function (s, t) {
    if (s.length !== t.length) return false;
    const hashArr = new Array(26).fill(0);
    let ascii_a = 'a'.charCodeAt(); 
    for (let i = 0; i < s.length; i++) {
        const item = s[i].charCodeAt();
        hashArr[item-ascii_a]++;
    }
    for(let i = 0;i < t.length;i++){
        const item = t[i].charCodeAt()
        hashArr[item - ascii_a]--;
        if(hashArr[item-ascii_a] < 0){
            return false
        }
    }
    return true;
};

总结:虽然哈希数组和哈希map都可以解决此题,但是hash map更容易理解,并且hash map是可以支持unicode字符的,因为hash的key允许是任意类型,所以推荐使用hash map来解题,不过由于哈希数组平时使用的比较少,可以作为一种练习


http://www.kler.cn/a/511748.html

相关文章:

  • AIGC视频生成模型:Meta的Emu Video模型
  • OpenHarmony-7.IDL工具
  • C++第十五讲:异常
  • “libcudart,so.1 1.0“ loss解决方案
  • 记录node-sass无法安装的问题
  • 【Android】蓝牙电话HFP连接源码分析
  • RoCE网络及其协议栈详解(没有中间商赚差价的网络)
  • 快速排序练习
  • Linux:生产者消费者模型
  • 第 3 章 核心处理层(上)
  • Bash 中 nohup 与 的区别及用法解析
  • leetcode416.分割等和子集
  • nginx作为下载服务器配置
  • Python人脸识别库DeepFace使用教程及源码解析
  • imbinarize函数用法详解与示例
  • python 基础类json和csv
  • 深入剖析iOS网络优化策略,提升App性能
  • 【LC】2239. 找到最接近 0 的数字
  • Node.js 写一个登录中间件
  • 排序算法学习小结
  • 如何确保Python爬虫不违反微店规定
  • Elixir语言的软件开发工具
  • 切面Aop的了解和使用
  • 【优选算法篇】2----复写零
  • 打游戏黑屏了但是有游戏声音 原因分析
  • 口令攻击和钓鱼攻击