leetcode242. 有效的字母异位词,哈希表

news2025/1/12 6:05:19

leetcode242. 有效的字母异位词

给定两个字符串 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 仅包含小写字母

在这里插入图片描述

目录

    • leetcode242. 有效的字母异位词
    • 题目分析
    • 算法步骤
    • 算法流程
    • 具体代码
    • 算法分析
    • 相似题目

题目分析

给定两个字符串 st,判断 t 是否是 s 的字母异位词。字母异位词是指由相同字母重排列形成的字符串。这个问题可以通过哈希表(或称为字典)来解决。

算法步骤

  1. 初始化一个无序哈希表 p
  2. 遍历字符串 s,将每个字符的出现次数存储在哈希表中。
  3. 遍历字符串 t,减少哈希表中对应字符的出现次数。
  4. 遍历哈希表 p,检查每个字符的出现次数是否为0。
  5. 如果所有字符的出现次数都为0,则返回 true,表示 ts 的字母异位词;否则返回 false

算法流程

开始
初始化无序哈希表p
遍历字符串s
遍历字符串t
遍历哈希表p
所有字符出现次数是否为0
返回true
返回false

具体代码

class Solution {
public:
    bool isAnagram(string s, string t) {
    unordered_map<char,int> p;
    for(int i=0;i<s.size();i++)
    {
        p[s[i]]++;
    }
    for(int i=0;i<t.size();i++)
    {
        p[t[i]]--;
    }
    for(auto q:p)
    {
        if(q.second!=0) return false;
    }
    return true;
    }
};

算法分析

  • 时间复杂度: O(n),其中 n 是字符串 st 的长度之和。
  • 空间复杂度: O(1),因为哈希表的大小只取决于字符集的大小,对于英文字母而言,其大小是固定的。
  • 易错点: 在处理字符出现次数时,需要注意字符的ASCII值范围,确保所有字符都能被正确处理。

相似题目

题目链接
242. 有效的字母异位词https://leetcode.cn/problems/valid-anagram/
49. 字母异位词分组https://leetcode.cn/problems/group-anagrams/
剑指 Offer II 032. 有效的变位词https://leetcode.cn/problems/dKk3P7/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2064818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

InternLM2.5-20B-Chat 正式上线 SiliconCloud 平台

经推理加速的 InternLM2.5-20B-Chat 已正式上线 SiliconCloud 平台。开发者们无需自行开发和部署&#xff0c;直接通过平台就可以轻松调用 API 服务实际应用。 API 调用代码&#xff1a; from openai import OpenAIclient OpenAI(api_key"YOUR_API_KEY", base_url&…

OV-DINO开放词检测环境安装与推理

引子 开放词检测&#xff0c;之前分享过一篇YOLO-World的文章&#xff0c;感兴趣同学请移步&#xff08;YOLO-World环境搭建&推理测试_yoloworld 检测-CSDN博客&#xff09;&#xff0c;最近&#xff0c;由中山大学和美团联合提出新的开放域检测方法OV-DINO&#xff1a;基…

Java小问答--线程池相关的一些问题

1.为什么需要线程池呢&#xff0c;它有哪些好处&#xff1f; 答&#xff1a;线程在创建并执行时会从用户态进入到内核态&#xff0c;这个过程会非常影响效率&#xff0c;有时这个过程可能甚至比执行线程内的代码还要费时费力&#xff0c;所以&#xff0c;为了解决这种问题&am…

上传文件到github仓库

REF: https://blog.csdn.net/litianxiang_kaola/article/details/74075151 已有repository&#xff0c;往仓库里更新内容 点击gitlab里的clone 在git bash中使用git clone&#xff0c;这个时候会将网上的仓库下载到本地&#xff0c;你可以把想要更新的内容直接拖到仓库里 …

Apache CloudStack Official Document 翻译节选(八)

关于 Apache CloudStack 的 最佳实践 &#xff08;二&#xff09; 防火墙的设定 Hardware Firewall 部署Apache CloudStack时&#xff0c;建议部署一套防火墙系统已保护Apache CloudStack的云管理服务。在防火墙的选用方面&#xff0c;既可以使用通用防火墙、也可以使用诸如Ju…

【算法】二叉树(满二叉树和完全二叉树)、堆(堆的向下调整)、堆排序、堆的内置模块heapq

1 二叉树 1.1 满二叉树和完全二叉树 1.2 堆的向下调整 2 堆排序 3 堆的内置模块 1 二叉树 二叉树是一种树形数据结构&#xff0c;其中每个节点最多有两个子节点&#xff0c;分别称为左子节点和右子节点。二叉树的常见类型包括&#xff1a; 1. **普通二叉树**&#xff1a;任意一…

在 uboot 中实现 UDP 协议

一、明确背景 uboot中有许多通信协议&#xff0c;像TFTP、NFS等&#xff0c;这些协议底层都是基于UDP协议来实现的&#xff0c;由于有一个板子在 uboot 段进行固件下载更新的需求&#xff0c;本来想基于TCP协议来实现自定义通信协议&#xff08;TCP有自带的拥塞控制和重传机制&…

Microsoft Visual C++ Redistributable的作用主要体现以及可以删除吗?

这些是Microsoft Visual C的不同版本的Redistributable&#xff08;可再发行组件包&#xff09;安装包&#xff0c;用于在用户的计算机上安装或更新必要的运行时库&#xff0c;以便运行使用这些版本的Visual C开发的应用程序。具体来说&#xff1a; Microsoft Visual C 2012 R…

编译linux内核时,让版本号不跟着git变化

文章目录 编译linux内核时&#xff0c;让版本号不跟着git变化现象方法一方法二 编译linux内核时&#xff0c;让版本号不跟着git变化 现象 内核每次重新编译时&#xff0c;uname -r都会跟着变。 4.1.15-00005-g482731e4-dirty 导致报错&#xff0c;modprobe: can’t change …

《深入理解Java虚拟机(第2版)》- 第1章 - 学习笔记

1.1 概述 Java不止是一门编程语言&#xff0c;它是一些列计算机软件和规范所形成的技术体系。 1.2 技术体系 Sun官方定义Java技术体系由5各部分组成&#xff0c;如下&#xff1a; Java编程语言JVMClass文件格式Java API 类库第三方Java类库&#xff08;商业或开源&#xff…

养猫家庭必备好物——宠物空气净化器,让浮毛无处可逃

前不久&#xff0c;我爸妈担心我独自一个人来到一个陌生的城市打拼&#xff0c;身边没人陪我会孤单&#xff0c;但其实我一点儿都不孤单。虽然我家里没有人陪我聊天说话一起做饭&#xff0c;但是有猫陪我。 之前来到这座城市的第二年就养了猫&#xff0c;心情确实好很多&#…

【数据分享】《中国奶业年鉴》2002-2020(缺2014)

而今天要限时免费分享的数据就是2002-2020年间出版的《中国奶业年鉴》并以多格式提供免费下载。&#xff08;无需分享朋友圈即可获取&#xff09; 数据介绍 《中国奶业年鉴》是反映我国奶业发展情况的综合性年刊&#xff0c;也是农业农村部&#xff08;原农业部&#xff0…

13、java 数组常见算法(经典案例)、Arrays类的使用(操作数组工具类)、数组常见异常(角标越界或空指针)

java 数组 Ⅰ、数组常见算法&#xff1a;1、二维数组的案例1&#xff1a;求和其一、代码为&#xff1a;其二、截图为&#xff1a; 2、二维数组的案例2&#xff1a;杨辉三角其一、描述&#xff1a;其二、代码为&#xff1a;其三、截图为&#xff1a; 3、二维数组的案例3&#xf…

如何使用jd-gui对springboot源码进行分析

背景&#xff1a; 最近在学习springboot的过滤器和拦截器&#xff0c;想了解一下过滤器和拦截器是怎么匹配URL的&#xff0c;在网上搜了半天都搜不到针对源码的&#xff0c;网上大部分内容都是说怎么配置过滤器和拦截器&#xff0c;怎么使用&#xff0c;并没有对源码进行分析的…

10分钟出稿!分享最佳6款AI智能一键生成毕业论文

在当前的学术环境中&#xff0c;AI智能写作工具已经成为许多学生和研究人员的重要助手。这些工具不仅能够帮助快速生成论文初稿&#xff0c;还能提供文献综述、语法检查等多种功能&#xff0c;极大地简化了学术写作流程。以下是六款最佳AI智能一键生成毕业论文的推荐&#xff1…

大学生实用工具!分享5款靠谱AI一键生成毕业论文的网站

对于大学生来说&#xff0c;毕业论文是一项重要的学术任务&#xff0c;但往往也是最令人头疼的部分。幸运的是&#xff0c;随着人工智能技术的发展&#xff0c;现在有一些工具可以帮助学生轻松完成论文。以下是五款靠谱的AI一键生成毕业论文的网站&#xff0c;其中特别推荐千笔…

EXCEL格式转化

1.小数位的保留 ROUND 四舍五入&#xff0c; ROUNDUP向上进一位 ROUNDDOWN向下进一位 2.货币符号与单位的添加 CTRLSHIFT4自定义格式&#xff0c;只改变显示&#xff0c;不改变数值 DOLLAR,RMB 3.英文大小写转化 UPPER小写变大写 LOWER大写变小写 PROPER首字母大写 …

ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 自定义范围后处理效果(优化版)

ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 自定义范围后处理效果&#xff08;优化版&#xff09; 核心代码完整代码在线示例 ArcGIS Maps SDK for JavaScript 从 4.29 开始增加 RenderNode 类&#xff0c;可以添加数据以及操作 FBO&#xff08;ManagedFBO&…

微信公众号扫码登录

开发前准备 微信公众平台微信公众平台&#xff0c;给个人、企业和组织提供业务服务与用户管理能力的全新服务平台。https://mp.weixin.qq.com/申请注册个服务号&#xff0c;并且需要微信认证&#xff0c;注意个人公众号无法开通这个功能&#xff0c;因为个人就不给做微信认证。…

Python | Leetcode Python题解之第350题两个数组的交集II

题目&#xff1a; 题解&#xff1a; class Solution:def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:nums1.sort()nums2.sort()length1, length2 len(nums1), len(nums2)intersection list()index1 index2 0while index1 < length1 and ind…