Leetcode 242:有效的字母异位词

leetcode:242. 有效的字母异位词 来源:力扣(LeetCode)链接: https://leetcode.cn/problems/valid-anagram/给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。示例 1: 示例 2: 提示:进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?使用列表自带的性质; python实现 c++实现 复杂度分析python实现 c++实现 复杂度分析 阅读详情

题目描述

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

示例 1:

输入: s = “anagram”, t = “nagaram”
输出: true
示例 2:

输入: s = “rat”, t = “car”
输出: false
说明:
你可以假设字符串只包含小写字母。

进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

我的解法:用map

想法是首先判断两字符串长度是否相等,然后把第一个string中出现的字母当成键存入map,对应的值为字母出现次数。然后遍历第二个string,当出现map中存在的键时对应的值减1,直到减为0,若string有字母对应map的键值为0,则返回false,如果循环执行结束一直没有返回false则返回true。代码见下:

class Solution {
public:
    bool isAnagram(string s, string t) {
        map<char, int> m;
        if(s.size() != t.size()){return false;}
        for(char c : s){++ m[c];}
        for(char c : t){
            if(m[c] > 0){-- m[c];}
            else{return false;}
        }
        return true;
    }
};

思考与收获

执行之后速度仅仅打败了一般的提交,这我不能忍啊,但是又不明白为什么都用了map了速度还这么慢。于是查看别人家的解法,发现用数组代替哈希表的话执行速度会更快,这我就不能理解了,于是查资料学习了一番之后得到了如下结论:

  1. ArrayList 有序集合 底层为数组 按下标查找快 增删慢 按元素查找、增删都慢
  2. LinkedList 有序集合 底层为链表 按下标查找慢 增删快 按元素查找慢 增删比arrayList快。
  3. HashMap 无序哈希表 底层哈希表 按元素查找快按下标查找一般比LinkedList快 增删快跟主体大小有关,越大越慢
  4. 按下标查找频繁的就是ArrayList,增删频繁的就用LinkedList
  5. HashMap是适用小数据量的快速查找、增删操作,大数量之后,由于插入和查找的内存消耗和冲突排除都会大大提高,所以大数量都不敢用hashMap。

那么,究竟多大数量算大呢,咱也不知道,反正以本题来说大小为26的话数组速度就大大超过map速度了。

以数组代替map的解法

class Solution {
public:
    bool isAnagram(string s, string t) {
        if(s.size() != t.size()){return false;}
        int m[26] = {0};
        for(char c : s){++ m[c - 'a'];}
        for(char c : t){
            if(m[c - 'a'] > 0){-- m[c - 'a'];}
            else{return false;}
        }
        return true;
    }
};
FreeRTOS OTA实战:从Bootloader设计到安全升级的完整流程(附MQTT示例代码) 本文详细介绍了在FreeRTOS系统中实现安全OTA固件升级的完整流程。内容涵盖从Bootloader设计、存储分区规划到与MQTT协议集成的OTA Agent任务开发,并重点解析了固件签名验证、防回滚等关键安全机制,为嵌入式物联网设备提供了一套高可靠性的远程升级解决方案。 阅读详情

相关推荐

spdk + fio测试nvme 设备的性能

fio的测试对象可以是块设备、文件等,在spdk的使用过程中会unbind默认的nvme driver,所以在系统中是看不到nvme块设备的,在spdk中可以通过fio_plugin的方式,将spdk的用户态driver部分的io功能打包成一个ioengine提供给fio使用,可以综合spdk的高性能和fio提供的复杂场景。更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加。这个jobfile是spdk中提供的例子。领取,关注我持续更新哦!2.7 jobfile的例子。

lingshengxiyou的博客 1089

leetcode.242. 有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 示例 1: 输入: s = "anagram", t = "nagaram" 输出: true 示例 2: 输入: s = "rat", t = "car" 输出: false 说明: 你可以假设字符串只包含小写字母。 思路: * 这里有两种方法: 1、先处理其中一个字符串,把该字符串里面的字母出现次数存储...

AcLings的博客 282

避开SiC MOSFET驱动设计的3个大坑:电流/电阻/电压配置全指南

本文深入解析SiC MOSFET驱动设计中的三大关键参数:驱动电流、栅极电阻和工作电压,揭示常见设计误区与优化方案。通过实际案例与数据对比,指导工程师避开第三代电力电子半导体应用中的典型陷阱,提升系统可靠性与效率。特别针对驱动电源配置、栅极电阻选型等核心问题提供可落地的解决方案。

weixin_29214199的博客 384

LeetCode242有效的字母异位词(简单)

原题目 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 示例 1: 输入: s = “anagram”, t = “nagaram” 输出: true 示例 2: 输入: s = “rat”, t = “car” 输出: false 说明: 你可以假设字符串只包含小写字母。 进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况...

忘之苡巛 189

嘉立创EDA实战:从点亮第一盏灯到完成首块PCB

本文详细介绍了使用嘉立创EDA从点亮第一盏LED灯到完成首块PCB的全过程。通过实战案例分享,包括原理图绘制、PCB设计、DRC检查、覆铜操作等关键步骤,帮助电子设计爱好者快速掌握嘉立创EDA的使用技巧,并避免常见的设计错误。

weixin_30314793的博客 373

Centos7网络配置(设置固定ip)

刚安装完系统,有的人尤其没有勾选自动网络配置的情况下,是访问不了外网的,本机也连不通虚拟机。或者现在有的是动态ip,几次之后启动ip地址就变了,会导致其他软件或程序之前连接配置要重新更改,很麻烦,下面讲解一下如何配置网络,如何设置成固定ip。

个人笔记git:https://gitee.com/tlangp/note.git 8054

力扣刷题笔记:有效的字母异位词(LeetCode242)

这道题的核心思路就是 “字符计数”,利用小写字母的特性用数组做计数器,简单又高效。其实也可以用哈希表(比如 HashMap)来计数,但对于只有 26 个小写字母的情况,数组比哈希表更快更省空间~​刚开始学的时候可能会疑惑 “为什么最后还要检查一次数组”,多举几个例子就明白了。刷题嘛,就是要多动手试,多画图分析~​今天的分享就到这里,大家赶紧去力扣上试试吧!有问题评论区问我呀,下次见~​。

2501_90563889的博客 1110

免杀思路总结

免杀思路总结 1.免杀技术简介 1.免杀的重要性 2.免杀的难度 3.杀毒软件的排行 国外 国内 1 、Bitdefender 1、360 2 、Norton 360 2、智量安全(没测过,据说很厉害) 3 、Kaspersky 3、火绒安全 4 、Webroot 4、金山独霸 5 、Trend Micro 5

LiBai'S BLOG 1万+

【简单】力扣算法题解析LeetCode242:有效的字母异位词

题目要求判断两个字符串是否为字母异位词(字母相同但排列不同)。解题思路:1)长度不同直接返回false;2)小写字母用26位数组统计字符频次,遍历时若计数<0则false;3)非小写字母改用HashMap统计。Java实现结合数组和HashMap,先检查长度,再按字符类型选择方法,确保高效处理。进阶问题(Unicode字符)通过HashMap解决。

ylumwd的博客 953

手把手教你学PCIE(1.38)--基本概念:ATU(地址转换单元)

ATU(Address Translation Unit)是一种硬件单元,用于在PCIe系统中进行地址转换。它将设备的本地地址(外部地址)转换为系统内存或配置空间中的全局地址(内部地址),反之亦然。ATU的工作原理:通过地址匹配和转换,确保事务能够在不同的地址空间之间正确路由。配置寄存器:通过配置寄存器来设置地址转换规则。应用场景:地址空间隔离、访问控制、动态地址管理、虚拟化和多租户。

MHD0815的博客 2057

标题:Stata17安装后遇到Java安装问题解决方法

设置JAVA_HOME环境变量:在Windows上,您需要设置JAVA_HOME环境变量以告诉Stata Java的安装路径。d. 输入变量名为JAVA_HOME,变量值为Java安装路径。注意:请确保您的Java版本与Stata兼容,并使用正确的Java安装路径。设置Stata的Java安装路径:现在,您需要告诉Stata Java的安装路径。如果您看到Java版本信息,则表示Java已成功安装。如果没有安装,请先下载并安装Java。确认Java已安装:首先,请确保您的计算机上已经正确安装了Java。

CyberSparkZ的博客 2867

LeetCode 242:有效的字母异位词

使用数组统计字母出现次数是一种高效的方法,时间复杂度为OnO(n)On。在主函数中,通过多组测试用例验证了代码的正确性。对于字符串操作问题,熟悉字符编码和数组操作尤为重要。希望这篇博客能帮助你理解 LeetCode 242 题的解决方案!💡。

weixin_48941116的博客 1145

SolidWorks 小车底盘 装配体

通过制作小车底盘了解solidworks装配体的部分知识

及时总结 2229

讲解Leetcode第242题:有效的字母异位词

输入:s=“anagram”,t=“nagaram”输出:true解释:字符串s和t由相同的字符组成,但是字符出现的顺序不同,故字符串s和t互为字母异位词。

序属秋秋秋的博客 1209

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Leetcode刷题:242.有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

qq_51560637的博客 1492

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

LeetCode:242. 有效的字母异位词

LeetCode:242. 有效的字母异位词、349. 两个数组的交集。 哈希表是根据关键码的值而直接进行访问的数据结构。就可以认为是一个数组,关键码就是指这个元素一个存储在数组的哪个位置。在Set集合里HashSet,会根据hashcode(哈希值)来存储元素。要在一个数组中查找一个元素,去一个个遍历,这个复杂度就是O(n),而使用哈希表复杂度是O(1)。 在哈希表存储元素的过程中,可能存储的元素得到的哈希值大于你的数组下标,我们通常会对哈希值进行取余操作后放入对应的数组位置。

Super algorithm 的博客,技术爱好者。 1023

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【LeetCode】第242题——有效的字母异位词(难度:简单)

【LeetCode】第242题——有效的字母异位词(难度:简单)题目描述解题思路代码详解思路一:StringBuffer思路二:int[26](推荐)注意点 题目描述 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。(PS:字母异位词即每个字母个数一样,但所处的位置未必一样) 示例 1: 输入: s = “anagram”, t = “nagaram” 输出: true 示例 2: 输入: s = “rat”, t = “car” 输出: false 说明: 你可

Se7en_Dayz的博客 127

力扣题:242.有效的字母异位词

力扣242. 有效的字母位词的Python3解答

weixin_47337647的博客 1079

LeetCode:242.有效字母的异位词

代码随想录第六天 2023.7.17题目链接:242. 有效的字母异位词 - 力扣(Leetcode)

xvxhshs的博客 181

算法第十七天:leetcode242.有效的字母异位词

如下表所示,您可以直接复制下面网址进入力扣学习,在观看下面的内容之前您一定要先做一遍哦,以便让你印象更加深刻!

m0_75068978的博客 814

Leetcode:242.有效的字母异位词

Leetcode:242.有效的字母异位词

xiaoshiguang3的博客 359

LeetCode 242. 有效的字母异位词:解法解析与时空优化全攻略

本文深入解析LeetCode 242题“有效的字母异位词”,从基础哈希表解法到时空优化进阶。首先解读题目核心定义和隐含条件,分析初始解法的三步逻辑与时空复杂度。重点介绍两个核心优化:提前长度判断减少无效执行,用数组替代Map实现极致空间优化。通过对比三种解法的时空复杂度,展示优化效果。最后提供刷题避坑建议,强调掌握“哈希计数”思想对解决同类问题的重要性。文章指出,这道简单题的价值在于理解优化思路,而非仅写出正确解法。

2401_86788218的博客 858

力扣:242. 有效的字母异位词

题目链接:242. 有效的字母异位词 题目: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 示例 1: 输入: s = “anagram”, t = “nagaram” 输出: true 示例 2: 输入: s = “rat”, t = “car” 输出: false 提示: 1 <= s.length, t.length <= 5 * 104 s 和 t 仅包

qq_46111138的博客 452
上一篇: Leetcode 36:有效的数独
下一篇: Leetcode 125:验证回文串
冀州少主
博客等级 码龄8年 16粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值