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

Leetcode刷题 由浅入深之哈希表——242. 有效的字母异位词

目录

(一)字母异位词的C++实现

写法一(辅助数组)

(二)复杂度分析

时间复杂度

空间复杂度

(三)总结


【题目链接】242.有效的字母异位词 - 力扣(LeetCode)

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

示例 1:

输入: s = "anagram", t = "nagaram"
输出: true

示例 2:

输入: s = "rat", t = "car"
输出: false

提示:

  • 1 <= s.length, t.length <= 5 * 104

  • s 和 t 仅包含小写字母

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

(一)字母异位词的C++实现

写法一(辅助数组)

解题思路:

        字母异位词的意思是两个词语中的字母和字母出现次数都是相同的,我们可以定义一个整型的辅助数组,用来存储每一个字母出现的次数。为了涵盖所有的测试样例,需要设置一个长度至少为26的数组并初始化为0。

        接着,分别遍历两个字符串中的字符,如果出现对应字母,对数组中的数值进行相应的修改。最后循环判断数组的每一个元素是否为0(在修改时一个字符串是+1,另一个字符串是-1,因此当为零时说明两个字符串中都没有出现或者是都出现且数量相等)。

        在本题中,s 和 t 仅包含小写字母,因此,我们采用相对位置对数组进行访问即可。

class Solution {
public:bool isAnagram(string s, string t) {vector<int> list(26, 0);for(auto i : s)list[i-'a']++;    //i-'a' 采用相对位置对数组元素进行访问for(auto j : t)list[j-'a']--;for(auto k : list){if(k != 0)return false;}return true;}
};

(二)复杂度分析

时间复杂度

        整个算法的时间复杂度取决于字符串 s 和 t 的长度,总体时间复杂度为 O(n+m)。通常情况下,若两个字符串长度相等,设长度为 n,则时间复杂度可简化为 O(n)

空间复杂度

        该算法使用了一个长度为 26 的 vector<int> 数组 list 来存储每个字母的出现次数。无论输入字符串的长度如何,这个数组的大小始终是固定的 26,不随输入规模的增大而增大。所以,空间复杂度为O(1)

(三)总结

(1)辅助数组思想的应用,也就是哈希表

(2)在本题中s 和 t 仅包含小写字母,可以尝试解决包含 unicode 字符该如何处理。

学习中,诚挚希望有心者指正和交流,经验或者方法都可。

相关文章:

Leetcode刷题 由浅入深之哈希表——242. 有效的字母异位词

目录 &#xff08;一&#xff09;字母异位词的C实现 写法一&#xff08;辅助数组&#xff09; &#xff08;二&#xff09;复杂度分析 时间复杂度 空间复杂度 &#xff08;三&#xff09;总结 【题目链接】242.有效的字母异位词 - 力扣&#xff08;LeetCode&#xff09; …...

自动化构建工具:makemakefile

在Windows中&#xff0c;我们写C代码或者C代码都需要用先找到一款合适的编译器&#xff0c;用来方便我们更好的完成代码&#xff0c;比如说vs2019&#xff0c;这些工具的特点是集成了多种开发所需的功能&#xff0c;如代码编辑、编译、调试、版本控制等&#xff0c;无需在不同的…...

刷题 | 牛客 - js中等10题(更ing)1/54知识点解答

知识点汇总&#xff1a; Array.from(要转换的对象, [mapFn], [thisArg ])&#xff1a;将类数组对象&#xff08;Array-like&#xff09;/可迭代对象&#xff08;Iterable&#xff09;转为真正的数组。 第二参 mapFn 是 类似 Array.prototype.map 的回调函数&#xff0c;加工…...

Ubuntu 20.04.6编译安装COMFAST CF-AX90无线网卡驱动

目录 0 前言 1 CF-AX90无线网卡驱动 1.1 驱动下载 1.2 驱动准备 2 编译安装驱动 2.1 拷贝驱动依赖到系统 2.2 驱动安装编译 3 重启 0 前言 COMFAST CF-AX90或者说AIC8800D80的Linux版本驱动不支持高版本的linux内核&#xff0c;实测目前仅支持最高5.15的内核。Ubuntu2…...

将python项目打包成Windows后台服务

前文,我开发了一个基于windows11与本地deepseek实现的语音助手,之前是通过CMD直接执行项目的main.py文件。但是这样不适合移植,现在想将其生成一个exe文件,以及部署成windows的后台服务。 关于语音助手的开发与发布,可以看的CSDN文章:一个基于windows11与本地deepseek实…...

PPT无法编辑怎么办?原因及解决方法全解析

在日常办公中&#xff0c;我们经常会遇到需要编辑PPT的情况。然而&#xff0c;有时我们会发现PPT文件无法编辑&#xff0c;这可能由多种原因引起。今天我们来看看PPT无法编辑的几种常见原因&#xff0c;并提供实用的解决方法&#xff0c;帮助你轻松应对。 原因1&#xff1a;文…...

安全用电基础知识及隐患排查重点

安全用电是电气安全的一个重要方面&#xff0c;作为普通人员&#xff0c;必须学会基础的用电知识和技巧&#xff0c;才能保障自己和家庭的安全。 以下是安全用电的基础知识及隐患排查重点&#xff1a; 一、基础知识 1.电压&#xff1a;单位为伏特&#xff08;V&#xff09;&a…...

Laravel 使用通义灵码 - AI 辅助开发提升效率

一、引言 Laravel 是 PHP 常用的一种后端开发框架&#xff0c;遵循 MVC&#xff08;模型 - 视图 - 控制器&#xff09;架构&#xff0c;以简洁、优雅的语法和强大的功能著称&#xff0c;旨在提升开发效率并简化复杂任务的实现。然而&#xff0c;它的开发习惯可能与传统的 PHP …...

签到功能---实现签到接口

文章目录 概要整体架构流程技术细节小结 概要 需求分析以及接口设计 由KEY的结构可知&#xff0c;要签到&#xff0c;就必须知道是谁在哪一天签到&#xff0c;也就是两个信息&#xff1a; 当前用户 当前时间 这两个信息我们都可以自己获取&#xff0c;因此签到时&#xff…...

JavaScript爬虫基础篇:HTTP 请求与响应

在互联网的世界里&#xff0c;数据无处不在。无论是新闻资讯、商品信息&#xff0c;还是社交媒体动态&#xff0c;这些数据都以各种形式存储在服务器上。而爬虫&#xff0c;就是我们获取这些数据的得力助手。今天&#xff0c;我们就来聊聊爬虫的基础——HTTP 请求与响应&#x…...

Python中的count()方法

文章目录 Python中的count()方法基本语法在不同数据类型中的使用1. 列表(List)中的count()2. 元组(Tuple)中的count()3. 字符串(String)中的count() 高级用法1. 指定搜索范围2. 统计复杂元素 注意事项 Python中的count()方法 前言&#xff1a;count()是Python中用于序列类型&a…...

LWIP_MQTT连接ONENET

前言&#xff1a; 使用正点原子STM32F407, LWIP,MQTT demo,验证LwIP的MQTT连接ONENET物联网平台,测试整个链路是否畅通&#xff0c;后面再详细分析LWIP移植和MQTT协议的使用。 26 基于 MQTT 协议连接 OneNET 服务器 本章主要介绍 lwIP 如何通过 MQTT 协议将设备连接到 OneNET…...

代码随想录刷题|Day20(组合总数,组合总数2、分割回文串)

回溯算法 Part02 组合总数 力扣题目链接 代码随想录链接 视频讲解 题目描述&#xff1a; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你…...

文件描述符(File Descriptor, FD)详解及利用方法

文件描述符&#xff08;FD&#xff09;是 Linux/Unix 系统中用于访问文件、管道、套接字等 I/O 资源的整数标识符。每个进程默认打开 3 个标准文件描述符&#xff1a; FD名称默认绑定设备用途0stdin键盘标准输入&#xff08;读取数据&#xff09;1stdout终端屏幕标准输出&…...

Minecraft盔甲机制详解(1.9之后)

Minecraft的盔甲有很多种&#xff0c;但是评判盔甲的好坏&#xff0c;通常玩家会使用一个变量来评判——护甲值 护甲值的机制很简单&#xff0c;一格护甲值 &#xff08;半个灰色的衣服图标&#xff09;最多能提供4%的防御 护甲值在不开作弊的生存模式理论上限是20点&#xf…...

ArcGIS Desktop使用入门(四)——9版本与10版本区别

系列文章目录 ArcGIS Desktop使用入门&#xff08;一&#xff09;软件初认识 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——标准工具 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——编辑器 ArcGIS Desktop使用入门&#xff08;二&#x…...

R语言之环境清理

有时候 R 环境中残留的变量可能会导致警告&#xff0c;可以尝试清理工作空间并重新加载数据。 警告信息: In mget(objectNames, envir ns, inherits TRUE) : 重新评估被中断的许诺 # 观察前6行 head(iris)# 观察数据结构 str(iris)# 探知数据的极值和分位数&#xff0c;以及…...

javaSE————网络编程套接字

网络编程套接字~~~~~ 好久没更新啦&#xff0c;蓝桥杯爆掉了&#xff0c;从今天开始爆更嗷&#xff1b; 1&#xff0c;网络编程基础 为啥要有网络编程呢&#xff0c;我们进行网络通信就是为了获取丰富的网络资源&#xff0c;说实话真的很神奇&#xff0c;想想我们躺在床上&a…...

FreeRTOS二值信号量详解与实战教程

FreeRTOS二值信号量详解与实战教程 &#x1f4da; 作者推荐&#xff1a;想系统学习FreeRTOS嵌入式开发&#xff1f;请访问我的FreeRTOS开源学习库&#xff0c;内含从入门到精通的完整教程和实例代码&#xff01; 1. 二值信号量核心概念解析 二值信号量(Binary Semaphore)是Fre…...

Java命名规则

在 Java 项目中&#xff0c;命名规则遵循一定的约定俗成规范&#xff0c;目的是提高代码可读性和团队协作效率。以下是 Java 项目命名的核心规则和常见实践&#xff1a; 一、项目整体命名​​ ​​项目名​​ 使用​​小写字母 短横线​​&#xff08;kebab-case&#xff09…...

赛灵思 XCVU440-2FLGA2892E XilinxFPGA Virtex UltraScale

XCVU440-2FLGA2892E 属于 Xilinx Virtex UltraScale 系列&#xff0c;是面向高端应用的旗舰 FPGA 器件。该系列产品以出色的高并行处理能力、丰富的逻辑资源和高速互联能力闻名&#xff0c;广泛用于 高性能计算、数字信号处理等对计算能力和带宽要求极高的场景。采用先进的 20n…...

Spring Cloud Alibaba微服务-微服务介绍和搭建

1. 课程介绍 单体服务中有订单&#xff0c;用户&#xff0c;库存&#xff0c; 两个缺陷&#xff1a; a. 是以应用的维度进行负载均衡&#xff0c;资源占用大 b. 当其中一个模块宕机&#xff0c;整个应用就不能用了&#xff1b; nacos&#xff1b;ribbon&#xff0c;loadBa…...

KALI安装JAVA8和切换JDK版本

一、安装JDK1.8 1、直接使用下面的地址下载java 1.8&#xff1a; https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz 2、建立目录&#xff0c;将下载的jdk的安装包复制过去并进行解压 sudo mkdir -p /usr/local/java cp jdk-8u202-linux-x64.t…...

C语言中冒泡排序和快速排序的区别

冒泡排序和快速排序都是常见的排序算法&#xff0c;但它们在原理、效率和应用场景等方面存在显著区别。以下是两者的详细对比&#xff1a; 一、算法原理 1. 冒泡排序 原理&#xff1a;通过重复遍历数组&#xff0c;比较相邻元素的大小&#xff0c;并在必要时交换它们的位置。…...

今日行情明日机会——20250417

指数目前在区间内缩量震荡 2025年4月17日涨停主要行业方向分析 一、核心主线方向 化工&#xff08;产能优化涨价预期&#xff09; • 涨停家数&#xff1a;11家&#xff08;最强方向&#xff09;。 • 代表标的&#xff1a; ◦ 红宝丽&#xff08;2连板&#xff09;&#xff…...

C# 对列表中的元素的多个属性进行排序

目录 前言一、OrderBy、OrderByDescending、ThenBy、ThenByDescending二、Sort 前言 在开发过程中&#xff0c;我们经常需要 根据列表中的元素的某个属性进行排序&#xff0c;下面我们将简单介绍常用的排序函数。 例如此处有一个类&#xff0c;拥有的元素为编号和值 public …...

QML 信号与槽

QML 信号与槽 QML 是 Qt 框架中用于构建现代化、流畅用户界面的声明式语言&#xff0c;其信号与槽&#xff08;Signals and Slots&#xff09;机制是实现组件间通信和交互的核心特性。与 C 的信号与槽类似&#xff0c;QML 的信号与槽提供了一种松耦合的方式&#xff0c;允许界…...

一篇讲完自动化测试基础-Python【万字详细讲解】12

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…...

极限编程(XP)简介及其价值观与最佳实践

目录 一、什么是极限编程&#xff08;XP&#xff09;二、极限编程的核心价值观1. 沟通2. 简单3. 反馈4. 勇气 三、极限编程的12个最佳实践1. 结对编程2. 40小时工作制3. 简单设计4. 代码规范5. 测试驱动开发&#xff08;TDD&#xff09;6. 系统隐喻7. 持续集成8. 重构9. 客户在…...

四层板的蛇形走线技巧:原理、策略与应用

在四层板的设计过程中&#xff0c;蛇形走线是一种常见且重要的布线方式。它能够满足特定的设计需求&#xff0c;如调整信号线长度、实现等长布线等&#xff0c;但如果使用不当&#xff0c;也可能会带来一些负面影响&#xff0c;如增加信号衰减、引入电磁干扰等。以下将详细探讨…...