首页 > 其他分享 >【JS】判断有效的字母异位词

【JS】判断有效的字母异位词

时间:2024-10-09 22:48:35浏览次数:10  
标签:count Map 字符 异位 字母 JS 计数 item 字符串

步骤

  1. 长度比较:首先检查两个字符串的长度是否相等。如果长度不相等,则直接返回 false,因为变位词的定义要求两个字符串必须包含相同数量的字符。

  2. 创建字符计数映射:使用一个 Map 对象来存储第一个字符串中每个字符的出现次数。Map 的键是字符,值是该字符出现的次数。

  3. 统计第一个字符串:遍历第一个字符串 s 中的每个字符,对于每个字符,如果它已经在 Map 中,则将其计数加一;如果不在 Map 中,则将其添加到 Map 中并设置计数为一。

  4. 校验第二个字符串:遍历第二个字符串 t 中的每个字符,对于每个字符:

    • 检查 Map 中是否存在该字符,并且对应的计数是否大于零。如果字符不存在于 Map 中,或者对应的计数为零,则说明第二个字符串包含第一个字符串中没有的字符,因此它们不可能是变位词,返回 false
    • 如果字符存在并且计数大于零,将其在 Map 中的计数减一。
  5. 最终判断:完成第二个字符串的所有字符校验后,如果所有字符都通过了校验,说明两个字符串的字符及其数量完全相同,因此它们是变位词,返回 true

题目

示例代码

var isAnagram = function(s, t) {
    // 如果两个字符串的长度不相等,则它们不可能是变位词
    if (s.length !== t.length) return false;
    // 创建一个Map对象(ES6引入的集合类型) 
    //特性:存储键值对,键的顺序会被记住,键唯一
    let count = new Map();
    // 遍历字符串s中的每个字符
    for(let item of s){
        // 如果字符已经在Map中,则增加它的计数,否则设置为1
        count.set(item, (count.get(item) || 0) + 1);
    }
    // 遍历字符串t中的每个字符
    for(let item of t){
        // 如果Map中没有该字符或者该字符的计数为0,则说明t中有s中没有的字符,返回false
        if(!count.get(item)) return false;

        // 将Map中该字符的计数减1
        count.set(item, count.get(item) - 1);
    }
    // 如果所有字符都通过了检查,说明s和t是变位词,返回true
    return true;
};

欢迎指正!

标签:count,Map,字符,异位,字母,JS,计数,item,字符串
From: https://blog.csdn.net/m0_74662483/article/details/142687420

相关文章

  • 【JS】哈希法解决两数之和
    思路使用哈希法:需要快速查询一个元素是否出现过,或者一个元素是否在集合里时本题需要一个集合来存放我们遍历过的元素,然后在遍历数组的时候去询问这个集合,符合要求的某元素是否遍历过,也就是是否出现在这个集合。因为要返回下标,所以使用Map集合,key存放元素值,value存放元素下......
  • js学习 -2024/10/9
    今天学习了js中的一些知识DOM通过document.get...函数获取元素对象可以查阅h3school资料找对象的函数,操作对象,//根据id获取元素对象//letid=document.getElementById('back');//id.src="../img/02.png";//根据标签获取元素对象vardivss=document.getElement......
  • codeforces round 974(div.3)E(优先队列实现dijstra算法,devc++的优先队列用greater报
    解题历程:看到两边同时移动,计算最终的相遇时间,我就想到两边同时计算各点到起点的最短距离,就是使用dijstra算法,最后所有节点取两次计算的最大值,再对所有节点取最小值,就是最终答案了,可是这个思路没有考虑有马的情况,思考一番后发现可以多列一个数组记录有马的情况下的行走最短路,然后......
  • JS刷力扣-链表【持续跟新】
    力扣的链表归类2.两数相加【链表+递归】前置知识:1.链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。2.链表的入口节点称为链表的头结点也就是head。leet......
  • DAY27||回溯算法基础 | 77.组合| 216.组合总和Ⅲ | 17.电话号码的字母组合
    回溯算法基础知识一种效率不高的暴力搜索法。本质是穷举。有些问题能穷举出来就不错了。回溯算法解决的问题有:组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集排列问题:N个数按一定规......
  • Vue.js点餐页面完整教程:从零开始实现功能齐全的点餐系统” “轻松上手!用Vue.js打造响
    效果图:目录一、创建Vue项目二、构建基本页面结构三、使用CSS美化页面四、实现页面交互功能五、完整代码展示六、结语步骤点餐页面是餐饮类应用的重要组成部分。它不仅要美观,还需要具备良好的交互体验。今天,我们将使用Vue.js和CSS从零开始制作一个响应式点餐页面,......
  • nodeJS构建错误——digital envelope routines::unsupported
    最近正在调研开源工作流项目,从github上克隆的代码,执行npmrundev报错。错误如下:查找原因出现了问题,自然要想办法解决。在网上搜索了一圈,发现该问题早已出现,一般描述的大致原因就是:当 nodejs 升级到17+版本以后,开始支持 OpenSSL3.0,而 OpenSSL3.0 对各种摘要算法做......
  • 基于nodejs+vue移动购物管家app[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着移动互联网技术的迅猛发展,智能手机已成为人们日常生活中不可或缺的一部分。在这一背景下,移动购物逐渐取代了传统购物方式,成为现代消费的主流模式。消费......
  • 基于nodejs+vue移动互联时代的设备管理系统[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,各类智能设备在日常生产和生活中的应用日益广泛。从智能手机到可穿戴设备,从工业控制设备到智能家居系统,这些设备极大地提升了......
  • 基于nodejs+vue颐心家政服务网站[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着现代生活节奏的加快,越来越多的家庭面临着时间管理和家务分配的挑战。传统的家政服务虽然在一定程度上缓解了这一压力,但信息不对称、服务质量参差不齐、......